Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment