Advertisement
Marisichka

Untitled

Oct 8th, 2021
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. #define SIZE 25
  5.  
  6. using namespace std;
  7.  
  8. class LongNumber {
  9.  
  10. public:
  11.     int data[SIZE];
  12.  
  13.     LongNumber() {
  14.  
  15.         for (int i = 0; i < SIZE; i++)
  16.             data[i] = 0;
  17.  
  18.     }
  19.  
  20.     LongNumber(string _no) {
  21.  
  22.         for (int i = 0; i < SIZE; i++) {
  23.             data[i] = 0;
  24.         }
  25.  
  26.         int index = SIZE - 1;
  27.  
  28.         for (int i = _no.length() - 1; i >= 0; i--, index--) {
  29.             data[index] = _no[i] - '0';
  30.         }
  31.     }
  32.  
  33.     LongNumber operator *(LongNumber& x) {
  34.  
  35.         LongNumber ret;
  36.         int carry = 0;
  37.         int mat[2 * SIZE + 1][2 * SIZE] = { 0 };
  38.  
  39.         for (int i = SIZE - 1; i >= 0; i--) {
  40.  
  41.             for (int j = SIZE - 1; j >= 0; j--) {
  42.                 carry += data[i] * x.data[j];
  43.  
  44.                 int index = SIZE - 1 - ((SIZE - 1 - i) + (SIZE - 1 - j));
  45.  
  46.                 if (index >= 0) {
  47.                     if (carry < 10) {
  48.                         mat[i][SIZE - 1 - ((SIZE - 1 - i) + (SIZE - 1 - j))] = carry;
  49.                         carry = 0;
  50.                     }
  51.                     else {
  52.                         mat[i][SIZE - 1 - ((SIZE - 1 - i) + (SIZE - 1 - j))] = carry % 10;
  53.                         carry = carry / 10;
  54.                     }
  55.                 }
  56.             }
  57.         }
  58.         for (int i = 1; i < SIZE + 1; i++) {
  59.             for (int j = SIZE - 1; j >= 0; j--) {
  60.                 carry += mat[i][j] + mat[i - 1][j];
  61.  
  62.                 if (carry < 10) {
  63.  
  64.                     mat[i][j] = carry;
  65.  
  66.                     carry = 0;
  67.  
  68.                 }
  69.  
  70.                 else {
  71.  
  72.                     mat[i][j] = carry % 10;
  73.  
  74.                     carry = carry / 10;
  75.  
  76.                 }
  77.             }
  78.         }
  79.  
  80.  
  81.         for (int i = 0; i < SIZE; i++) {
  82.             ret.data[i] = mat[SIZE][i];
  83.         }
  84.  
  85.         return ret;
  86.     }
  87.  
  88.     void print() {
  89.  
  90.         int start = 0;
  91.         for (int i = 0; i < SIZE; i++)
  92.             if (data[i] != 0) {
  93.                 start = i;
  94.                 break;
  95.             }
  96.  
  97.         for (int i = start; i < SIZE; i++)
  98.  
  99.             cout << data[i];
  100.         cout << endl;
  101.         return;
  102.  
  103.     }
  104. };
  105.  
  106. int main() {
  107.  
  108.     string str1, str2;
  109.     cin >> str1 >> str2;
  110.  
  111.     LongNumber n1(str1);
  112.     LongNumber n2(str2);
  113.  
  114.     LongNumber n3 = n1 * n2;
  115.  
  116.     int k = 0;
  117.     for (int i = 0; i < SIZE; i++)
  118.     {
  119.         if (n3.data[i] == 0)
  120.         {
  121.             k++;
  122.         }
  123.         else
  124.             break;
  125.     }
  126.  
  127.     if (k == SIZE) {
  128.         cout << "0" << endl;
  129.     }
  130.  
  131.     else {
  132.  
  133.         for (int i = k; i < SIZE; i++) {
  134.             cout << n3.data[i];
  135.         }
  136.     }
  137.  
  138.     return 0;
  139.  
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement