0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
1

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

30.09.2013, 16:39. Показов 15671. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2013, 16:39
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Для решения задачи арифметика дальше +10 и -1 не уходит остальное это просто использование булевого флага переноса единицы на следующую цифру
Если посмотреть мой уровень знаний на графике(х,у) то он там по у ниже х на одиничек так с 20. Короче: Что я знаю?
самые низы, иф-елсе, циклы 50 на 50 и подключение матх.х библиотек. Что то там с ячейками пробывал(строка и в ней ячейки начиная с 0). Так что ваш совет мне не очень ясен....
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 17:33 4
ОК. Объясняю
Что такое число - это набор цифр
Что мы еще знаем что цифра принадлежит диапазону от 0 до 9, если же она больше 9, то лишняя цифра переходит к левостоящей, если же она меньше 0, то левостоящая цифра уменьшается а к текущему значению цифры прибавляется 10
Что нам еще известно
При вводе числа из консоли происходит преобразования строки в число.
Ага значит если у нас нет такого целочисленного типа данных, то мы можем миновать это преобразования строки в число и работать непосредственно со строкой
Таким образом, необходимое условию максимальное число мы можем представить в виде строки.
Дальше мы начинаем работать с последним символом строки.
ведь символы это тип char а по сути это знаковое число от -128 до +127 и к ним применимы арифметические действия.
Определив код символа '0' мы можем получить допустимые границы значений для символов. и используя вышеуказанные правила мы поднимаемся к начальному символу в строке по необходимости преобразуя согласно изменений после прибавления или убавления единицы.
1
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 17:39  [ТС] 5
на словах вроде бы понятно, как это в код обратить?
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 18:22 6
Только для работы с положительными числами
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
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 21:04  [ТС] 7
а можеш коментарии к строкам написать, чтобы я знал что и как
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 21:55 8
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
0 / 0 / 1
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 22:57  [ТС] 9
а где ты учился?
0
HedgehogLu
30.09.2013, 23:24     Напишите программу, которая находит следующее и предыдущее число для заданного N
  #10

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2013, 23:24

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru