Advertisement
beefviper

Multiply numbers

Oct 2nd, 2021
1,349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. BigNum multiply_numbers(BigNum& num1, BigNum& num2)
  2. {
  3.     BigNum result{};
  4.  
  5.     if (num1.base == num2.base)
  6.     {
  7.         result.base = num1.base;
  8.     }
  9.     else
  10.     {
  11.         return result;
  12.     }
  13.  
  14.     auto it1 = num1.number.rbegin();
  15.     uint64_t tens = 0;
  16.  
  17.     while (it1 != num1.number.rend())
  18.     {
  19.         auto it2 = num2.number.rbegin();
  20.        
  21.         BigNum number{};
  22.         number.base = num1.base;
  23.  
  24.         uint64_t base = num1.base;
  25.         uint64_t digit = 0;
  26.         uint64_t carry = 0;
  27.  
  28.         while (it2 != num2.number.rend())
  29.         {
  30.             auto tmp = *it1 * *it2 + carry;
  31.  
  32.             digit = tmp % base;
  33.             carry = tmp / base;
  34.  
  35.             number.number.push_back(digit);
  36.  
  37.             it2++;
  38.         }
  39.  
  40.         if (carry != 0)
  41.         {
  42.             number.number.push_back(carry);
  43.         }
  44.  
  45.         std::reverse(number.number.begin(), number.number.end());
  46.  
  47.         for (uint64_t i = 0; i < tens; i++)
  48.         {
  49.             number.number.push_back(0);
  50.         }
  51.  
  52.         tens++;
  53.  
  54.         result = add_numbers(result, number);
  55.  
  56.         it1++;
  57.     }
  58.  
  59.     return result;
  60. }
  61.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement