Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BigNum multiply_numbers(BigNum& num1, BigNum& num2)
- {
- BigNum result{};
- if (num1.base == num2.base)
- {
- result.base = num1.base;
- }
- else
- {
- return result;
- }
- auto it1 = num1.number.rbegin();
- uint64_t tens = 0;
- while (it1 != num1.number.rend())
- {
- auto it2 = num2.number.rbegin();
- BigNum number{};
- number.base = num1.base;
- uint64_t base = num1.base;
- uint64_t digit = 0;
- uint64_t carry = 0;
- while (it2 != num2.number.rend())
- {
- auto tmp = *it1 * *it2 + carry;
- digit = tmp % base;
- carry = tmp / base;
- number.number.push_back(digit);
- it2++;
- }
- if (carry != 0)
- {
- number.number.push_back(carry);
- }
- std::reverse(number.number.begin(), number.number.end());
- for (uint64_t i = 0; i < tens; i++)
- {
- number.number.push_back(0);
- }
- tens++;
- result = add_numbers(result, number);
- it1++;
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement