From 589f8e2558d008c63892f2345b233e28d889620b Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Fri, 8 Sep 2017 20:06:38 +0200 Subject: Added the addition of two numbers We're using the grade school addition method to compute the sum of two numbers of size n. Signed-off-by: Olivier Gayot --- number.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'number.cpp') diff --git a/number.cpp b/number.cpp index e942cf2..f6f445c 100644 --- a/number.cpp +++ b/number.cpp @@ -1,5 +1,46 @@ #include "number.h" +/* Operations {{{ */ + +number +number::operator+(const number &n) const +{ + /* We make sure our object is greater than or equal to n. */ + if (*this < n) { + return n.operator+(*this); + } + + number result; + + auto it = _operands.cbegin(); + auto it_n = n._operands.cbegin(); + + bool carry = false; + + while (it != _operands.cend()) { + const auto n1 = *it; + const auto n2 = *it_n; + + result._operands.push_back(n1 + n2 + (carry ? 1 : 0)); + + if (carry && (n1 == UINT64_MAX)) { + carry = true; + } else { + carry = ((UINT64_MAX - n1 - (carry ? 1 : 0)) < n2); + } + + ++it; + ++it_n; + } + + if (carry) { + result._operands.push_back(1); + } + + return result; +} + +/* }}} */ /* Comparison operators {{{ */ bool -- cgit v1.2.3