Advertisement
Anwar_Rizk

big add/multi

Nov 7th, 2021
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. string BigAdd(string s, string t){
  2.         string res;
  3.         int sz = max(s.size(), t.size());
  4.         reverse(s.begin(), s.end());
  5.         reverse(t.begin(), t.end());
  6.         char carry = '0';
  7.         int e = 0, f = 0;
  8.         for(int i = 0; i < sz || carry != '0'; i++){
  9.         e = (i >= s.size() ? 0 : s[i] - '0');
  10.         f = (i >= t.size() ? 0 : t[i] - '0');
  11.         int tmp = (carry - '0') + e + f;
  12.         carry = (tmp/10) + '0';
  13.         res.push_back(tmp%10 + '0');
  14.         }
  15.         reverse(res.begin(), res.end());
  16.         while(res[0] == '0') res.erase(res.begin());
  17.         return res;
  18.     }
  19.    
  20.     string multiply(string s, string t) {
  21.         if(s == "0" || t == "0") return "0";
  22.         string res;
  23.         reverse(s.begin(), s.end());
  24.         reverse(t.begin(), t.end());
  25.         for(int i = 0; i < t.size(); i++){
  26.         string tmp = string(i, '0');
  27.         char carry = '0';
  28.         for(int j = 0; j < s.size(); j++){
  29.             int m = (t[i]-'0') * (s[j]-'0') + (carry - '0');
  30.             carry = (m/10) + '0';
  31.             tmp.push_back(m%10 + '0');
  32.         }
  33.         tmp.push_back(carry);
  34.         reverse(tmp.begin(), tmp.end());
  35.         res = BigAdd(res, tmp);
  36.         }
  37.         while(res[0] == '0') res.erase(res.begin());
  38.         return res;
  39.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement