Advertisement
ElfikCo

Duże liczby - dodawanie

Jan 25th, 2017
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <string>
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <cmath>
  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órce, gdy 199 + 001 = 19: -> 1:0 -> 200
  13.     static_cast<int>(aln) = a.length();
  14.     static_cast<int>(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.         std::reverse(b.begin(), b.end());
  20.         while(true)
  21.         {
  22.             b += '0';
  23.             bln++;
  24.             if (bln == aln)break;
  25.         }
  26.         std::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. int main()
  71. {
  72.     string liczba1;
  73.     string liczba2;
  74.     cin >> liczba1;
  75.     cin >> liczba2;
  76.     string wynik = { 0 };
  77.     wynik = bnm_add(liczba1, liczba2);
  78.     cout << "WYNIK DODAWANIA: " << wynik << endl << "\n";
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement