Advertisement
czaffik

działania na napisach (duże liczby)

Sep 6th, 2019
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. inline int toInt(char s) { return static_cast<int>(s) - 48; }
  6. inline int toChar(int n) { return static_cast<char>(n + 48); }
  7. void removeLeadingZeros(string &a)
  8. {
  9.     int k; for (k = 0; k < a.size(); k++) if (a[k] != '0') break;
  10.     a.erase(0, k);
  11.     if (a.size() == 0) a = "0";
  12. }
  13.  
  14. string add(string &a, string &b)
  15. {
  16.     string res = "";
  17.     if (a.size() < b.size()) swap(a, b);
  18.  
  19.     int ad = 0, i, j, r;
  20.     for (i = a.size()-1, j = b.size()-1; j >= 0; i--, j--)
  21.     {
  22.         r = toInt(a[i]) + toInt(b[j]) + ad;
  23.         if (r >= 10) { res.insert(res.begin(), toChar(r%10)); ad = r/10; }
  24.         else { res.insert(res.begin(), toChar(r)); ad = 0; }
  25.     }
  26.     while (ad)
  27.     {
  28.         if (i >= 0) r = toInt(a[i--]) + ad;
  29.         else r = ad;
  30.         if (r >= 10) { res.insert(res.begin(), toChar(r%10)); ad = r/10; }
  31.         else { res.insert(res.begin(), toChar(r)); ad = 0; }
  32.     }
  33.     while (i >= 0) { res.insert(res.begin(), a[i]); i--; }
  34.     return res;
  35. }
  36.  
  37. string sub(string &a, string &b)
  38. {
  39.     string res = "";
  40.  
  41.     int su = 0, i, j, r;
  42.     for (i = a.size()-1, j = b.size()-1; j >= 0; i--, j--)
  43.     {
  44.         r = toInt(a[i]) - toInt(b[j]) - su;
  45.         if (r < 0) { r += 10; res.insert(res.begin(), toChar(r)); su = 1; }
  46.         else { res.insert(res.begin(), toChar(r)); su = 0; }
  47.     }
  48.     while (su)
  49.     {
  50.         r = toInt(a[i--]) - su;
  51.         if (r < 0) { r += 10; res.insert(res.begin(), toChar(r)); su = 1; }
  52.         else { res.insert(res.begin(), toChar(r)); su = 0; }
  53.     }
  54.     while (i >= 0) { res.insert(res.begin(), a[i]); i--; }
  55.  
  56.     removeLeadingZeros(res);
  57.     return res;
  58. }
  59.  
  60. string mul(string &a, string &b)
  61. {
  62.     vector<string> res(b.size());
  63.     string resultat;
  64.  
  65.     int ad;
  66.     for (int i = b.size()-1, k = 0; i >= 0; i--, k++)
  67.     {
  68.         ad = 0;
  69.         for (int j = a.size()-1; j >= 0; j--)
  70.         {
  71.             int r = toInt(b[i])*toInt(a[j]) + ad;
  72.             if (r >= 10) { res[k].insert(res[k].begin(), toChar(r%10)); ad = r/10; }
  73.             else { res[k].insert(res[k].begin(), toChar(r)); ad = 0; }
  74.         }
  75.         res[k].insert(res[k].begin(), toChar(ad));
  76.         removeLeadingZeros(res[k]);
  77.         string tmp = res[k];
  78.         for (int l = 0; l < k; l++) tmp.push_back('0');
  79.         resultat = add(resultat, tmp);
  80.         removeLeadingZeros(resultat);
  81.     }
  82.  
  83.     return resultat;
  84. }
  85.  
  86. int main()
  87. {
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement