Задача D. Следующее число
Для заданного натурального числа N найти минимальное число M,
большее N, с той же, что у N, суммой цифр.
Исходные данные
В единственной строке записано число N (1 < N < 10^100000).
Результат
Вывести единственное число M.
Пример
Исходные данные / Результат
524 533
1 10
999 1899
Другие языки программирования и технологии
Помогите с задачей С++ (Нужно очень срочно)
#include <stdio.h>
void inc(char* s)
{ int r,j;
for(r=-1;s[++r];);
for(j=r-1;j>=0;j--) if(s[j]=='9') s[j]='0'; else { s[j]++; break; }
}
int main()
{ int i,j,k,r,n0,n9;
char x,s[100001];
printf("(1...10^100000): ");
scanf("%s",s);
for(r=-1;s[++r];);
for(n0=0,j=r-1;j>=0 && s[j]=='0';j--) n0++;
for(x=s[j--],n9=0;j>=0 && s[j]=='9';j--) n9++;
s[j+1]=0;
if(j
void inc(char* s)
{ int r,j;
for(r=-1;s[++r];);
for(j=r-1;j>=0;j--) if(s[j]=='9') s[j]='0'; else { s[j]++; break; }
}
int main()
{ int i,j,k,r,n0,n9;
char x,s[100001];
printf("(1...10^100000): ");
scanf("%s",s);
for(r=-1;s[++r];);
for(n0=0,j=r-1;j>=0 && s[j]=='0';j--) n0++;
for(x=s[j--],n9=0;j>=0 && s[j]=='9';j--) n9++;
s[j+1]=0;
if(j
Можно так: СМОТРИ ССЫЛКУ или здесь
#include "iostream.h"
#include "conio.h"
int main(int argc, char* argv[])
{
char *n = new char[100001];
cout << "Vvod N:";
cin >> n;
cout << endl;
cout << "N=" << n << endl;
int lenN = strlen(n);
// если введена не пустая строка
if(lenN > 0)
{
char *nend = n+lenN-1; // указатель на последний символ или младший разряд числа
char s=0; // статус
char *p = nend; // указатель текущего обрабатываемого символа
char *sd = nend; // указатель сдвигаемого символа
// если последний символ не 0
if (*p != '0')
{
(*p)--; // то просто уменьшим его на 1
s=1; // статус в 1
p--; // сместим указатель на 1 вниз
}
else // иначе 0 и поиск не нулевого символа
{
while(s==0 && p>=n) // делать пока статус 0 или пока не вышли за границу
{
// если символ не 0
if (*p != '0')
{
(*p)--; // то просто уменьшим на 1
// переместим этот символ в конец строки, а за место этого 0 впишем
*nend = *p; *p = '0';
s=1; // статус в 1
}
p--; // сместим указатель на 1 вниз
}
}
while(s==1 && p>=n) // делать пока статус 1 или пока не вышли за границу
{
// если символ 9, то затолкнуть его в конец
if(*p == '9')
{
// перепишем позицию взяв из разряда правее
*p = *(p+1);
*(sd-1) = *sd; //сдвинем
*sd = '9'; // на место сдвигаемого можно записать 9
*nend = '9'; // последний символ всегда 9
sd--; // новая позиция сдвигаемого символа
}
else // иначе нашли не 9
{
(*p)++; // то просто увеличим его на 1
s=2; // статус в 2
}
p--; // сместим указатель на 1 вниз
}
// если статус остался 1, то все 9 и надо добавить 1 в начало
if(s==1) cout << "M=1" << n << endl;
// иначе если статус 2, то просто вывод
else if(s==2) cout << "M=" << n << endl;
// если введены все 0, то вывода не будет
}
delete[] n;
getch();
return 0;
}
#include "iostream.h"
#include "conio.h"
int main(int argc, char* argv[])
{
char *n = new char[100001];
cout << "Vvod N:";
cin >> n;
cout << endl;
cout << "N=" << n << endl;
int lenN = strlen(n);
// если введена не пустая строка
if(lenN > 0)
{
char *nend = n+lenN-1; // указатель на последний символ или младший разряд числа
char s=0; // статус
char *p = nend; // указатель текущего обрабатываемого символа
char *sd = nend; // указатель сдвигаемого символа
// если последний символ не 0
if (*p != '0')
{
(*p)--; // то просто уменьшим его на 1
s=1; // статус в 1
p--; // сместим указатель на 1 вниз
}
else // иначе 0 и поиск не нулевого символа
{
while(s==0 && p>=n) // делать пока статус 0 или пока не вышли за границу
{
// если символ не 0
if (*p != '0')
{
(*p)--; // то просто уменьшим на 1
// переместим этот символ в конец строки, а за место этого 0 впишем
*nend = *p; *p = '0';
s=1; // статус в 1
}
p--; // сместим указатель на 1 вниз
}
}
while(s==1 && p>=n) // делать пока статус 1 или пока не вышли за границу
{
// если символ 9, то затолкнуть его в конец
if(*p == '9')
{
// перепишем позицию взяв из разряда правее
*p = *(p+1);
*(sd-1) = *sd; //сдвинем
*sd = '9'; // на место сдвигаемого можно записать 9
*nend = '9'; // последний символ всегда 9
sd--; // новая позиция сдвигаемого символа
}
else // иначе нашли не 9
{
(*p)++; // то просто увеличим его на 1
s=2; // статус в 2
}
p--; // сместим указатель на 1 вниз
}
// если статус остался 1, то все 9 и надо добавить 1 в начало
if(s==1) cout << "M=1" << n << endl;
// иначе если статус 2, то просто вывод
else if(s==2) cout << "M=" << n << endl;
// если введены все 0, то вывода не будет
}
delete[] n;
getch();
return 0;
}
я бы запилил цикл от числа до макс числа, потом переводил бы новые числа в строки и вычислял бы сумму и сверял бы с суммой начального числа
p.s. цикл от начального числа +1
p.s.s. ничу ты не проверял, я те скинул на почту решение, но на другом языке, тебе надо только найти эквиваленты функций другого языка для С++.
p.s. цикл от начального числа +1
p.s.s. ничу ты не проверял, я те скинул на почту решение, но на другом языке, тебе надо только найти эквиваленты функций другого языка для С++.
Похожие вопросы
- помогите решить задачи на делфи!!!!ОЧЕНЬ СРОЧНО И ОЧЕНЬ НАДО!!!!
- Люди помогите написать программы для Pascal очень срочно и очень нужно
- Помогите решить задачи по информатике!!! ОЧЕНЬ НУЖНО!!!
- люди добрые!С праздником!как сделать снимок страницы!нужно очень срочно!плиз,помогите)))
- Помогите решить задачи на языке C# Срочно
- Помогите пожалуйста... мне так нужно.. очень очень!!! нужно составить легенькую програмку в паскале)
- Можно ли как нибудь в паспорте при помощи фотошопа убрать печать о том что снят с учета? Нужно очень срочно!!!
- Нужно очень срочно создать программу. На языке c ++
- Помогите пожалуйста ничего не понимаю очень срочно на языке с#
- Помогите решить задачу в Delphi срочно! буду очень благодарен.