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

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

30.09.2013, 16:39. Показов 18110. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru