Iamtui1010

bignum

Nov 7th, 2021 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.66 KB | None | 0 0
  1. //#include<bits/stdc++.h>
  2. #include<iostream>
  3. #include<fstream>
  4. #include<string>
  5. #include<sstream>
  6. #include<algorithm>
  7. #include<cmath>
  8.  
  9. #define long long
  10. #define nln '\n'
  11.  
  12. using namespace std;
  13.  
  14. // Global variables: f1, f2, a, b
  15.  
  16. fstream f1, f2;
  17.  
  18.  
  19. inline void openf()
  20. {
  21.     f1.open("bignum.inp", ios:: in);
  22.     f2.open("bignum.out", ios:: out);
  23. }
  24.  
  25. inline void closef()
  26. {
  27.     f1.close();
  28.     f2.close();
  29. }
  30.  
  31. string a, b;
  32.  
  33. void data()
  34. {
  35.     //f1.tie(0)->sync_with_stdio(0);
  36.     //f2.tie(0)->sync_with_stdio(0);
  37.     cin.tie(0)->sync_with_stdio(0);
  38.     cin >> a;
  39.     cin >> b;
  40. }
  41.  
  42. void fill(string &a, string &b)
  43. {
  44.     reverse(a.begin(), a.end());
  45.     reverse(b.begin(), b.end());
  46.     if (a.size() > b.size())
  47.     {
  48.         long leb = b.size();
  49.         for (long i = 0; i != a.size()-leb; ++i)
  50.             b += '0';
  51.     }
  52.     else
  53.     {
  54.         long lea = a.size();
  55.         for (long i = 0; i != b.size()-lea; ++i)
  56.             a += '0';
  57.     }
  58. }
  59.  
  60. string cha2str(char cha)
  61. {
  62.     string str = "";
  63.     str += cha;
  64.     return str;
  65. }
  66.  
  67. char str2cha(string str)
  68. {
  69.     char x = str[0];
  70.     return x;
  71. }
  72.  
  73. string num2str(long num)
  74. {
  75.     string str = "0";
  76.     while (num > 0)
  77.     {
  78.         str += num%10 + '0';
  79.         num = num/10;
  80.     }
  81.     reverse(str.begin(), str.end());
  82.     return str;
  83. }
  84.  
  85. long str2num(string str)
  86. {
  87.     long num = 0;
  88.     for (long i = 0; i != str.size(); ++i)
  89.     {
  90.         num += (str[i]-'0')*pow(10, str.size()-i-1);
  91.     }
  92.     return num;
  93. }
  94.  
  95. string sum(string a, string b)
  96. {
  97.     if (a.size() == b.size())
  98.     {
  99.         reverse(a.begin(), a.end());
  100.         reverse(b.begin(), b.end());
  101.     }
  102.     else
  103.         fill(a, b);
  104.  
  105.     string res = "";
  106.     long rem = 0;
  107.     for (long i = 0; i != a.size(); ++i)
  108.     {
  109.         long tol = str2num(cha2str(a[i])) + str2num(cha2str(b[i])) + rem;
  110.         res += str2cha(num2str(tol%10));
  111.         rem = tol/10;
  112.     }
  113.     if (rem != 0)
  114.         res += str2cha(num2str(rem));
  115.  
  116.     reverse(res.begin(), res.end());
  117.     return res;
  118. }
  119.  
  120. void swap(string &a, string &b)
  121. {
  122.     string itm = a;
  123.     a = b;
  124.     b = itm;
  125. }
  126.  
  127. string sub(string a, string b)
  128. {
  129.     bool neg = 0;
  130.     if (a.size() == b.size())
  131.     {
  132.         reverse(a.begin(), a.end());
  133.         reverse(b.begin(), b.end());
  134.     }
  135.     else
  136.         fill(a, b);
  137.  
  138.     string tea = a, teb = b;
  139.     reverse(tea.begin(), tea.end());
  140.     reverse(teb.begin(), teb.end());
  141.  
  142.     if (tea < teb)
  143.     {
  144.         neg = 1;
  145.         swap(a, b);
  146.     }
  147.  
  148.     long rem = 0;
  149.     string res = "";
  150.     for (long i = 0; i != a.size(); ++i)
  151.     {
  152.         long x = str2num(cha2str(a[i]));
  153.         long y = str2num(cha2str(b[i]));
  154.         long tol = x - y - rem;
  155.         if (tol < 0)
  156.         {
  157.             res += str2cha(num2str((tol+10) % 10));
  158.             rem = 1;
  159.         }
  160.         else
  161.         {
  162.             res += str2cha(num2str(tol % 10));
  163.             rem = 0;
  164.         }
  165.     }
  166.  
  167.     while (res[res.size()-1] == '0' && res.size() != 1)
  168.         res.erase(res.size()-1, 1);
  169.  
  170.     if (neg)
  171.         res += '-';
  172.  
  173.     reverse(res.begin(), res.end());
  174.  
  175.     return res;
  176. }
  177.  
  178. string mul1(string a, string b)
  179. {
  180.     long y = str2num(b);
  181.     string res = "";
  182.     long rem = 0;
  183.     for (long i = a.size()-1; i+1 != 0; --i)
  184.     {
  185.         long x = str2num(cha2str(a[i]));
  186.         long tol = x*y+rem;
  187.         res += str2cha(num2str(tol % 10));
  188.         rem = tol / 10;
  189.     }
  190.     if (rem != 0)
  191.         res += str2cha(num2str(rem));
  192.     reverse(res.begin(), res.end());
  193.     return res;
  194. }
  195.  
  196. string mul(string a, string b)
  197. {
  198.     string res = "";
  199.  
  200.     for (long i = b.size()-1; i+1 != 0; --i)
  201.     {
  202.         string tem = mul1(a, cha2str(b[i]));
  203.         for (long j = 0; j != b.size()-i-1; ++j)
  204.             tem += '0';
  205.         res = sum(res, tem);
  206.     }
  207.     return res;
  208. }
  209.  
  210. void process()
  211. {
  212. }
  213.  
  214. void printans(string ans)
  215. {
  216.     for (long i = 0; i != ans.size(); ++i)
  217.         cout << ans[i];
  218.     cout << nln;
  219. }
  220.  
  221. void view()
  222. {
  223.     string an1 =  sum(a, b);
  224.     string an2 =  sub(a, b);
  225.     string an3 =  mul(a, b);
  226.     printans(an1);
  227.     printans(an2);
  228.     printans(an3);
  229.  
  230. }
  231.  
  232. int main()
  233. {
  234.     //openf();
  235.     data();
  236.     process();
  237.     view();
  238.     //closef();
  239. }
Advertisement
Add Comment
Please, Sign In to add comment