#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; }