Advertisement
ElfikCo

Palindrome Numbers with string addition

Oct 31st, 2017
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8. string bnm_add(string a, string b)
  9. {
  10.     string wynik;
  11.     string length;                          // length == najdウuソszy string
  12.     int aln, bln, switcher(0);              // switcher -> dodaje 1 w lewej komce, gdy 199 + 001 = 19: -> 1:0 -> 200
  13.     aln = a.length();
  14.     bln = b.length();
  15.     //printf("\na: %i \nb: %i\n\n", aln, bln);
  16.     if (aln > bln)
  17.     {                                       //DODAWANIE ZER : 199 + 1 -> 199 + 001 = 200, (aby 199 + 1 != 299)
  18.         length = a;
  19.         reverse(b.begin(), b.end());
  20.         while (true)
  21.         {
  22.             b += '0';
  23.             bln++;
  24.             if (bln == aln)break;
  25.         }
  26.         reverse(b.begin(), b.end());                // odwracamy 1 -> 100 -> 001 itd.
  27.     }
  28.     else if (bln > aln)
  29.     {
  30.         length = b;
  31.         reverse(a.begin(), a.end());
  32.         while (true)
  33.         {
  34.             a += '0';
  35.             aln++;
  36.             if (aln == bln)break;
  37.         }
  38.         reverse(a.begin(), a.end());
  39.     }
  40.     else if (aln == bln)
  41.     {
  42.         length = a;
  43.     }
  44.     for (size_t x = length.length() - 1; x >= 0; x--)
  45.     {
  46.         char buffor;
  47.         buffor = a[x] + (b[x] - 48) + switcher; // Wstawianie do bufora wartosci, np. 1 + 2 (buff = 49 + (50-48) + 0)
  48.         if (buffor < 48)
  49.         {
  50.             buffor += 48;
  51.         }
  52.         switcher = 0;
  53.         if (buffor > 57)                                // przypadek np. 96 + 85
  54.         {
  55.             switcher = 1;
  56.             buffor -= 10;
  57.         }
  58.         wynik += buffor;                                // dodawanie buffora do wyniku
  59.         buffor = { 0 };
  60.         if (x == 0 && switcher == 1)
  61.         {
  62.             wynik += '1';                               // Przechodzenie np. 9 -> 10, 999 -> 1249, dodawanie jedynki po lewej.
  63.         }
  64.         if (x == 0)break;
  65.     }
  66.     reverse(wynik.begin(), wynik.end());            // na koniec odwracamy (wszystko byウo odwrotnie naliczane)
  67.     //printf("\n  %s\n+ %s\n____________________________________________________\n  %s\n\n", a.c_str(), b.c_str(), wynik.c_str());
  68.     return wynik;
  69. }
  70.  
  71. class zliczanie
  72. {
  73.  
  74.     bool if_number = false;
  75.     bool czy_palindrom = false;
  76.     string buff, nbuff, i1npocz;
  77.     long long lit = 0;
  78.     string pocz, npocz;
  79. public:
  80.     bool lel = true;
  81.  
  82.     void wprowadzanie()
  83.     {
  84.         cout << endl;
  85.         buff.clear();
  86.         cin >> buff;
  87.         cout << endl;
  88.         for (size_t i = 0; i < buff.length(); i++)
  89.         {
  90.             if (buff[i] == '0' || buff[i] == '1' || buff[i] == '2' || buff[i] == '3' || buff[i] == '4' || buff[i] == '5' || buff[i] == '6' || buff[i] == '7' || buff[i] == '8' || buff[i] == '9')
  91.             {
  92.                 if_number = true;
  93.             }
  94.             else
  95.             {
  96.                 if_number = false;
  97.                 cin.clear();
  98.                 cout << "GIVE A NUMBER!" << endl;
  99.                 return wprowadzanie();
  100.             }
  101.         }
  102.     }
  103.     void check()
  104.     {
  105.         while (czy_palindrom == false)
  106.         {
  107.             if (lit == 0)
  108.             {
  109.  
  110.                 string a = buff;
  111.                 pocz = a;
  112.                 nbuff = buff;
  113.                 reverse(nbuff.begin(), nbuff.end());
  114.                 string b = nbuff;
  115.                 npocz = b;
  116.             }
  117.             if (lit > 1000)
  118.             {
  119.                 cout << "Value your computer and give another number ;) " << endl;
  120.                 lel = false;
  121.                 break;
  122.             }
  123.             if (nbuff == buff)
  124.             {
  125.                 czy_palindrom = true;
  126.                 lel = false;
  127.                 break;
  128.             }
  129.             else
  130.             {
  131.                 buff = bnm_add(buff, nbuff);
  132.                 //cout << endl << "buff: " << buff << endl;
  133.                 lit++;
  134.                 nbuff = buff;
  135.                 reverse(nbuff.begin(), nbuff.end());
  136.                 if (lit == 1)
  137.                 {
  138.                     i1npocz = nbuff;
  139.                 }
  140.                 return check();
  141.             }
  142.         }
  143.     }
  144.     void wynik()
  145.     {
  146.         if (czy_palindrom == true)
  147.         {
  148.                 cout << endl << "Number " << pocz << " after " << lit << " iterations is a palindrome: " << buff << endl << endl;
  149.         }
  150.     }
  151. };
  152.  
  153. int main()
  154. {
  155.     zliczanie a1;
  156.  
  157.     a1.wprowadzanie();
  158.     while (a1.lel == true)
  159.     {
  160.         a1.check();
  161.     }
  162.     a1.wynik();
  163.     cout << "click 'r' to continue" << endl;
  164.     char t = _getch();
  165.     if (t == 'r')
  166.     {
  167.         cout << endl << endl << "_______" << endl;
  168.         return main();
  169.     }
  170.     else
  171.     return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement