Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/88: Рейтинг темы: голосов - 88, средняя оценка - 4.73
 Аватар для vladenio
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52

Напишите программу, которая находит следующее и предыдущее число для заданного N

30.09.2013, 16:39. Показов 18183. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема следующая. Есть задачка:
Напишите программу, которая находит следующее и предыдущее число для заданного N.

Входные данные. Входной поток содержит целое число N по модулю не больше 10 в степени 30.

Выходные данные. В выходной поток выводим текст по образцу. Слова и числа разделяются только одним пробелом, в начале и в конце текста пропусков нет.
примеры
Входные данные Результат работы

3 The next number for the number 3 is 4.
The previous number for the number 3 is 2.
Сначало я не обратил внимание на ограничение и сделал программу с long long int, а потом заметил что он не тянет ограничение. Потом узнал что есть такая вещт как длинная арифметика и можно как то что то подключить. Но мой уровень знания С++ не позволяет мне это сделать. Прошу помощи.Заранее спасибо. И вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    long long int a, s, N;
    cin>>N;
    a=N-1;
    s=N+1;
    cout<<"The next number for the number "<<N<<" is "<<s<<"."<<endl;
    cout<<"The previous number for the number "<<N<<" is "<<a<<"."<<endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2013, 16:39
Ответы с готовыми решениями:

Напишите программу, которая запрашивает у пользователя числа до тех пор, пока каждое следующее число целое
Напишите программу, которая запрашивает у пользователя числа до тех пор, пока каждое следующее число целое. В конце программа сообщает,...

Напишите программу, которая находит k-е в возрастающем порядке число в массиве A=(a1;a2;...;an).
Напишите программу, которая находит k-е в возрастающем порядке число в массиве A=(a1;a2;...;an). Массив A задается с помощью полинома...

Используя функцию, напишите программу, которая находит число Армстронга
Используя функцию , напишите программу которая, которая находит число Аристрона . Число Аристрона -это такое натуральное число , которое...

9
 Аватар для HedgehogLu
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 17:08
ну можно даже не заморачиваться с длинной алгеброй а самому обрабатывать число в строковом представлении
тогда вам вообще будет не важно длинна числа.
т.о вы работаете со строкой длинной не более 31 символа.

Для решения задачи арифметика дальше +10 и -1 не уходит остальное это просто использование булевого флага переноса единицы на следующую цифру

Добавлено через 5 минут
теоретически цифры можно даже оставить в символьном представлении и просто после применения операции инкремента или декремент проверять на выход из диапазона символов '0'-'9'
1
 Аватар для vladenio
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 17:12  [ТС]
Цитата Сообщение от HedgehogLu Посмотреть сообщение
ну можно даже не заморачиваться с длинной алгеброй а самому обрабатывать число в строковом представлении
тогда вам вообще будет не важно длинна числа.
т.о вы работаете со строкой длинной не более 31 символа.

Для решения задачи арифметика дальше +10 и -1 не уходит остальное это просто использование булевого флага переноса единицы на следующую цифру
Если посмотреть мой уровень знаний на графике(х,у) то он там по у ниже х на одиничек так с 20. Короче: Что я знаю?
самые низы, иф-елсе, циклы 50 на 50 и подключение матх.х библиотек. Что то там с ячейками пробывал(строка и в ней ячейки начиная с 0). Так что ваш совет мне не очень ясен....
0
 Аватар для HedgehogLu
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 17:33
ОК. Объясняю
Что такое число - это набор цифр
Что мы еще знаем что цифра принадлежит диапазону от 0 до 9, если же она больше 9, то лишняя цифра переходит к левостоящей, если же она меньше 0, то левостоящая цифра уменьшается а к текущему значению цифры прибавляется 10
Что нам еще известно
При вводе числа из консоли происходит преобразования строки в число.
Ага значит если у нас нет такого целочисленного типа данных, то мы можем миновать это преобразования строки в число и работать непосредственно со строкой
Таким образом, необходимое условию максимальное число мы можем представить в виде строки.
Дальше мы начинаем работать с последним символом строки.
ведь символы это тип char а по сути это знаковое число от -128 до +127 и к ним применимы арифметические действия.
Определив код символа '0' мы можем получить допустимые границы значений для символов. и используя вышеуказанные правила мы поднимаемся к начальному символу в строке по необходимости преобразуя согласно изменений после прибавления или убавления единицы.
1
 Аватар для vladenio
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 17:39  [ТС]
на словах вроде бы понятно, как это в код обратить?
0
 Аватар для HedgehogLu
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 18:22
Только для работы с положительными числами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<stdio.h>
#include <iostream.h>
 
int main(int argc, char *argv[])
{
    char Big_N[31];
    char tmp[31];
    cout<<"Vvedite N"<<endl;
    cin>>Big_N;
    short len=strlen(Big_N);
    if (len>30)
    {
               cout<<"Chislo slishkom bolshoe"<<endl;
               system("pause");
               return (0);
    }
    memcpy(tmp,Big_N,len+1);
    short tlen=len-1;
    tmp[tlen]--;
    while ((tlen>0)&&(tmp[tlen]<'0'))
    {
          tmp[tlen--]='9';
          tmp[tlen]--;
    }
    cout <<"predidushee chislo - ";
    if (tmp[0]<'0') cout<<"-1"<<endl;
    else 
    {
         if (tmp[0]='0') tmp[0]=' ';
         cout<<tmp<<endl;
    }
    memcpy(tmp,Big_N,len+1);
    tlen=len-1;
    tmp[tlen]++;
    while ((tlen>0)&&(tmp[tlen]>'9'))
    {
          tmp[tlen--]='0';
          tmp[tlen]++;
    }
    cout <<"sleduushee chislo - ";
    if (tmp[0]>'9')
    {
                   tmp[0]='0';
                   cout<<"1";
    }
    cout<<tmp<<endl;
    cout<<"gotovo"<<endl;
    system("pause");
 
}
как добавить обработку отрицательных чисел додумаешь сам или тоже написать?
1
 Аватар для vladenio
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 21:04  [ТС]
а можеш коментарии к строкам написать, чтобы я знал что и как
0
 Аватар для HedgehogLu
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 21:55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<stdio.h>
#include <iostream.h>
 
int main(int argc, char *argv[])
{
    char Big_N[31]; //наше число максимум знаков плюс возможный символ конца строки
    char tmp[31]; //второе результирующее число после операции
    cout<<"Vvedite N"<<endl; 
    cin>>Big_N; //вводим большое число строкой не числом
    short len=strlen(Big_N); //определяем количество цифр в числе
    if (len>30) //если число цифр превышает допустимое ссно не удовлетворяет условию
    {
               cout<<"Chislo slishkom bolshoe"<<endl;
               system("pause");
               return (0);
    }
    memcpy(tmp,Big_N,len+1); //копируем все данные из введенного числа в результирующее
    short tlen=len-1; //определяем индекс младшей цифры числа
    tmp[tlen]--; //вычетаем 1 у младшей цифры
    while ((tlen>0)&&(tmp[tlen]<'0')) //до тех пор, пока анализируемая цифра вне диапазона (0 - 9), 
//т.е. пока нам необходимо осуществлять заем у старшей цифры
    {
          tmp[tlen--]='9'; //прописываем в текущую цифру 9 и сразу изменяем индекс анализируемый цифры на более старшую (левее)
          tmp[tlen]--; //уменьшаем ее, т.к. мы осуществили из нее заем
    }
    cout <<"predidushee chislo - "; //выводим число на экран. 
    if (tmp[0]<'0') cout<<"-1"<<endl;  //правда проверим одну внештатную ситуацию когда первоначально число было нулем и заем осуществлять было невозможно тогда выводим -1
    else 
    {
         if (tmp[0]='0') tmp[0]=' '; //иначе удаляем возможный 0 перед числом дабы избежать вывода например 09 вместо 9
         cout<<tmp<<endl;
    }
//подготавливаемся для увеличения
    memcpy(tmp,Big_N,len+1);//копируем
    tlen=len-1;//получаем индекс
    tmp[tlen]++;//увеличиваем младшую цифру
    while ((tlen>0)&&(tmp[tlen]>'9'))//и аналогично пролому анализируем последующие цифры тут думаю можно додуматься что и как
    {
          tmp[tlen--]='0';
          tmp[tlen]++;
    }
    cout <<"sleduushee chislo - ";
    if (tmp[0]>'9') //а вот тут проверяем внештатную ситуацию когда  число состояло из 9, тогда у нас получается не куда воткнуть старшую единицу и мы ее выводим искусственно
    {
                   tmp[0]='0';
                   cout<<"1";
    }
    cout<<tmp<<endl;
    cout<<"gotovo"<<endl;
    system("pause");
 
}
Все комментарии не писал, чтобы можно было подумать и вникнуть
Более того нигде нет проверок на то что пользователь укажет именно число а не произвольную строку.
Так же не отбрасываются впередистоящие нули которые увеличивают длину строки, но никак не повышают разрядность числа.
Ну и понятное дело это неправильно работает с отрицательными числами
1
 Аватар для vladenio
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 22:57  [ТС]
а где ты учился?
0
30.09.2013, 23:24

Не по теме:

в ВНУ (Восточноукраинский национальный университет)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2013, 23:24
Помогаю со студенческими работами здесь

Напишите программу, которая находит число дней в этом году
Напишите программу, которая находит число дней в этом году. Указание. В современном (григорианском) календаре каждый год, номер ...

Напишите программу, которая в последовательности натуральных чисел находит наименьшее число, кратное 3
Напишите программу, которая в последовательности натуральных чисел находит наименьшее число, кратное 3. Программа получает на вход целые...

Задано натуральное число N. Напишите программу, которая находит первые N натуральных нечетных чисел
Задано натуральное число N. Напишите программу, которая выводит первые N натуральных нечётных чисел. Формат входных данных Во входном...

Напишите программу, которая вводит натуральное число n и находит все совершенные числа в диапазоне от 1 до n
Найдите, пожалуйста, ошибку!!! #include &lt;iostream&gt; using namespace std; int main() { int i,n,b,a; cout &lt;&lt;...

Напишите программу, которая вводит натуральное число N и находит все совершенные числа в диапазоне от 1 до N
Совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число 6=1+2+3). Напишите программу, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru