Guest User

Kaiu

a guest
Oct 20th, 2013
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include "iostream.h"
  2. #include "conio.h"
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6.   char *n = new char[100001];
  7.  
  8.   cout << "Vvod N:";
  9.   cin >> n;
  10.   cout << endl;
  11.   cout << "N=" << n << endl;
  12.  
  13.   int lenN = strlen(n);
  14.   // если введена не пустая строка
  15.   if(lenN > 0)
  16.   {
  17.     char *nend = n+lenN-1; // указатель на последний символ или младший разряд числа
  18.     char s=0; // статус
  19.  
  20.     char *p = nend; // указатель текущего обрабатываемого символа
  21.     char *sd = nend; // указатель сдвигаемого символа
  22.  
  23.     // если последний символ не 0
  24.     if (*p != '0')
  25.     {
  26.       (*p)--; // то просто уменьшим его на 1
  27.       s=1; // статус в 1
  28.       p--; // сместим указатель на 1 вниз
  29.     }
  30.     else // иначе 0 и поиск не нулевого символа
  31.     {
  32.       while(s==0 && p>=n) // делать пока статус 0 или пока не вышли за границу
  33.       {
  34.         // если символ не 0
  35.         if (*p != '0')
  36.         {
  37.           (*p)--; // то просто уменьшим на 1
  38.           // переместим этот символ в конец строки, а за место этого 0 впишем
  39.           *nend = *p; *p = '0';
  40.           s=1; // статус в 1
  41.         }
  42.         p--; // сместим указатель на 1 вниз
  43.       }
  44.     }
  45.  
  46.  
  47.     while(s==1 && p>=n) // делать пока статус 1 или пока не вышли за границу
  48.     {
  49.       // если символ 9, то затолкнуть его в конец
  50.       if(*p == '9')
  51.       {
  52.         // перепишем позицию взяв из разряда правее
  53.         *p = *(p+1);
  54.         *(sd-1) = *sd; //сдвинем
  55.         *sd = '9'; // на место сдвигаемого можно записать 9
  56.         *nend = '9'; // последний символ всегда 9
  57.         sd--; // новая позиция сдвигаемого символа
  58.       }
  59.       else // иначе нашли не 9
  60.       {
  61.         (*p)++; // то просто увеличим его на 1
  62.         s=2; // статус в 2
  63.       }
  64.  
  65.       p--; // сместим указатель на 1 вниз
  66.     }
  67.  
  68.  
  69.  
  70.     // если статус остался 1, то все 9 и надо добавить 1 в начало
  71.     if(s==1) cout << "M=1" << n << endl;
  72.     // иначе если статус 2, то просто вывод
  73.     else if(s==2) cout << "M=" << n << endl;
  74.  
  75.     // если введены все 0, то вывода не будет
  76.  
  77.   }
  78.  
  79.  
  80.   delete[] n;
  81.   getch();
  82.   return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment