Advertisement
nq1s788

Untitled

Nov 11th, 2022
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.53 KB | None | 0 0
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<bitset>
  4. #include<cmath>
  5. #include<deque>
  6. #include<iomanip>
  7. #include<list>
  8. #include<vector>
  9. #include<queue>
  10. #include<string>
  11. using namespace std;
  12.  
  13. long long good_pow(long long n, long long step, long long raz) {
  14.     if (step == 0) {
  15.         return 1;
  16.     }
  17.     else if (step % 2 == 0) {
  18.         return (good_pow(n, step / 2, raz) * good_pow(n, step / 2, raz)) % raz;
  19.     }
  20.     else {
  21.         return (good_pow(n, step - 1, raz) * n) % raz;
  22.     }
  23. }
  24.  
  25. class BigInt {
  26. public:
  27.     deque <long long> ch;
  28.     bool znak = 1;
  29.     long long len = 0;
  30.     long long raz = long long(1e9);
  31.     BigInt(string a) {
  32.         long long pl = 0;
  33.         for (long long i = 0; i < a.size(); ++i) { ///12345, pl = 123;
  34.             pl *= 10;
  35.             pl += (a[i] - 48);
  36.             if (pl > raz) {
  37.                 int plp = pl / raz;
  38.                 ch.push_front(pl % raz);
  39.                 pl = plp;
  40.             }
  41.         }
  42.         ch.push_front(pl);
  43.         reverse(ch.begin(), ch.end());
  44.         len = ch.size();
  45.     }
  46.     BigInt operator + (BigInt b) {
  47.         BigInt a("");
  48.         long long mlen = min(len, b.len);
  49.         a.ch.assign(max(len, b.len) + 1, 0);
  50.         for (long long i = 0; i < mlen; ++i) {
  51.             if (ch[i] + b.ch[i] < raz) {
  52.                 a.ch[i] = ch[i] + b.ch[i];
  53.             }
  54.             else {
  55.                 a.ch[i] += (ch[i] + b.ch[i]) % raz;
  56.                 a.ch[i + 1] += 1;
  57.             }
  58.         }
  59.         for (int i = mlen; i < len; ++i) {
  60.             a.ch[i] = ch[i];
  61.         }
  62.         a.len = a.ch.size();
  63.         return a;
  64.     }
  65.     BigInt operator - (BigInt b) {
  66.         BigInt a("");
  67.         a.ch.assign(max(len, b.len) + 1, 0);
  68.         for (long long i = 0; i < b.len; ++i) {
  69.             if (ch[i] - b.ch[i] < 0) {
  70.                 a.ch[i + 1] -= 1;
  71.                 a.ch[i] = ch[i] - b.ch[i] + raz;
  72.             }
  73.             else {
  74.                 a.ch[i] = ch[i] - b.ch[i];
  75.             }
  76.         }
  77.         for (int i = b.len; i < len; ++i) {
  78.             a.ch[i] = ch[i];
  79.         }
  80.         a.len = a.ch.size();
  81.         return a;
  82.     }
  83.     BigInt operator * (BigInt b) {
  84.         BigInt a("0");
  85.         for (long long i = 0; i < b.len; ++i) { /// 375 * 24 = (4 * 5) (7 * 2)
  86.             BigInt prom("");
  87.             prom.ch.assign((len + 1), 0);
  88.             for (long long j = 0; j < len; ++j) {
  89.                 if (b.ch[i] * ch[j] < raz) {
  90.                     prom.ch[j] += ch[j] * b.ch[i];
  91.                 }
  92.                 else {
  93.                     prom.ch[j] += (ch[j] * b.ch[i]) % raz;
  94.                     prom.ch[j + 1] += (ch[j] * b.ch[i]) / raz;
  95.                 }
  96.             }
  97.             string h = "";
  98.             for (int j = 0; j < i; ++j) {
  99.                 h += "0";
  100.             }
  101.             prom.len = prom.ch.size();
  102.             BigInt prom1(prom.returner() + h);
  103.             a = prom1 + a;
  104.         }
  105.         a.len = a.ch.size();
  106.         return a;
  107.     }
  108.     void print() {
  109.         string vyvod = "";
  110.         long long starter = 0;
  111.         for (long long i = len - 1; i >= 0; --i) {
  112.             if (ch[i] != 0) {
  113.                 break;
  114.             }
  115.             starter += 1;
  116.         }
  117.         for (long long i = 0; i < len - starter; i++) {
  118.             string prom = to_string(ch[i]);
  119.             if (prom.size() < (int)log10(raz)) {
  120.                 long long x = (int)prom.size();
  121.                 for (int i = 0; i < (int)log10(raz) - x; ++i) {
  122.                     prom = "0" + prom;
  123.                 }
  124.             }
  125.             vyvod = prom + vyvod;
  126.         }
  127.         // cout << vyvod << endl;
  128.         if (!znak) {
  129.             vyvod = "-" + vyvod;
  130.         }
  131.         if (vyvod[0] == 48) {
  132.             string x = "";
  133.             bool flag = 0;
  134.             for (long long i = 0; i < vyvod.size(); ++i) {
  135.                 if (vyvod[i] != 48) {
  136.                     flag = 1;
  137.                 }
  138.                 if (flag) {
  139.                     x += vyvod[i];
  140.                 }
  141.             }
  142.             vyvod = x;
  143.         }
  144.         cout << vyvod << endl;
  145.     }
  146.     string returner() {
  147.         string vyvod = "";
  148.         long long starter = 0;
  149.         for (long long i = len - 1; i >= 0; --i) {
  150.             if (ch[i] != 0) {
  151.                 break;
  152.             }
  153.             starter += 1;
  154.         }
  155.         for (long long i = 0; i < len - starter; i++) {
  156.             string prom = to_string(ch[i]);
  157.             if (prom.size() < (int)log10(raz)) {
  158.                 long long x = (int)prom.size();
  159.                 for (int i = 0; i < (int)log10(raz) - x; ++i) {
  160.                     prom = "0" + prom;
  161.                 }
  162.             }
  163.             vyvod = prom + vyvod;
  164.         }
  165.         // cout << vyvod << endl;
  166.         if (!znak) {
  167.             vyvod = "-" + vyvod;
  168.         }
  169.         if (vyvod[0] == 48) {
  170.             string x = "";
  171.             bool flag = 0;
  172.             for (long long i = 0; i < vyvod.size(); ++i) {
  173.                 if (vyvod[i] != 48) {
  174.                     flag = 1;
  175.                 }
  176.                 if (flag) {
  177.                     x += vyvod[i];
  178.                 }
  179.             }
  180.             vyvod = x;
  181.         }
  182.         return vyvod;
  183.     }
  184.     void look() {
  185.         for (auto e : ch) cout << e << ' ';
  186.     }
  187. };
  188.  
  189. int main() {
  190.     BigInt a("1234098673896"), b("10"); //10000000010 10 10 0 0
  191.     a.print();
  192.     b.print();
  193.     a.look();
  194.     cout << endl;
  195.     b.look();
  196.     cout << endl;
  197.     (a + b).print();
  198.     (a * b).print();
  199.     //(a * b).look();
  200.     //(a + b).look();
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement