Advertisement
beefviper

Add numbers

Oct 2nd, 2021
956
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.75 KB | None | 0 0
  1. BigNum add_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.     auto it2 = num2.number.rbegin();
  16.  
  17.     uint64_t carry = 0;
  18.  
  19.     while (it1 != num1.number.rend() || it2 != num2.number.rend())
  20.     {
  21.         uint64_t n1 = (it1 != num1.number.rend()) ? *it1++ : 0;
  22.         uint64_t n2 = (it2 != num2.number.rend()) ? *it2++ : 0;
  23.  
  24.         uint64_t temp = n1 + n2 + carry;
  25.         carry = 0;
  26.  
  27.         if (temp > num1.base - 1)
  28.         {
  29.             temp = temp % num1.base;
  30.             carry = 1;
  31.         }
  32.  
  33.         result.number.push_back(temp);
  34.     }
  35.  
  36.     if (carry == 1)
  37.     {
  38.         result.number.push_back(1);
  39.     }
  40.  
  41.     std::reverse(result.number.begin(), result.number.end());
  42.  
  43.     return result;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement