Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
vladenio
 Аватар для vladenio
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 52
30.09.2013, 16:39     Напишите программу, которая находит следующее и предыдущее число для заданного N #1
Тема следующая. Есть задачка:
Напишите программу, которая находит следующее и предыдущее число для заданного 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2013, 16:39     Напишите программу, которая находит следующее и предыдущее число для заданного N
Посмотрите здесь:

C++ Написать программу, которая считывает число с клавиатуры и находит ближайшее справа число, которое равно сумме кубов своих цифр
Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины, которая содержится и в первом, и во вт C++
C++ Реализовать программу, которая для заданного N (N<10100) находит его цифровой корень
C++ Разработать функцию, которая для заданного натурального числа находит корень
Напишите программу, которая находит сумму ряда C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
30.09.2013, 17:08     Напишите программу, которая находит следующее и предыдущее число для заданного N #2
ну можно даже не заморачиваться с длинной алгеброй а самому обрабатывать число в строковом представлении
тогда вам вообще будет не важно длинна числа.
т.о вы работаете со строкой длинной не более 31 символа.

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

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

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

C++ Напишите программу, которая вводит натуральное число n и находит все совершенные числа в диапазоне от 1 до n
Написать программу, которая находит максимальное число из трех C++
C++ Напишите программу, которая находит минимальный и максимальный элементы двумерного массива

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

Или воспользуйтесь поиском по форуму:
HedgehogLu
30.09.2013, 23:24     Напишите программу, которая находит следующее и предыдущее число для заданного N
  #10

Не по теме:

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

Yandex
Объявления
30.09.2013, 23:24     Напишите программу, которая находит следующее и предыдущее число для заданного N
Ответ Создать тему
Опции темы

Текущее время: 03:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru