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