def compute_with_numbers(self, a: Number, b: Number) -> Number: if not b: raise DividingByZeroError() b_copy = Number(b.digits.copy()) q = Number([0]) r = Number(a.digits.copy()) while r >= b_copy: n = len(r) - len(b_copy) n_digits = [0 for _ in range(n)] n_digits.extend(b_copy.digits) n_number = Number(n_digits) if n_number > r: n -= 1 del n_number.digits[0] c = CommandContext.Base - 1 cal = n_number * Number([c]) while cal > r: c -= 1 cal = n_number * Number([c]) c_digits = [0 for _ in range(n)] c_digits.append(c) q = q + Number(c_digits) r = r - cal if a.sign != b.sign: q.sign = Sign.negative return q
def compute_with_numbers(self, a: Number, b: Number) -> Number: res = Number([0]) for offset, i in enumerate(a.digits): digits = [0 for _ in range(offset)] carry_over = 0 for index, j in enumerate(b.digits): compute = i * j + carry_over digits.append(compute % CommandContext.Base) carry_over = compute // CommandContext.Base if carry_over != 0: digits.append(carry_over) else: while len(digits) > 1 and digits[-1] == 0: digits.pop() res = res + Number(digits, Sign.positive) if a.sign != b.sign: res.sign = Sign.negative return res