예제 #1
0
 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
예제 #2
0
 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