In [72]:
def digit_mult_digit(digit1, digit2, carry):
assert (digit1 < 10 and digit2 < 10), "Enter digits please"
mult = digit1 * digit2 + carry
return mult % 10, mult // 10
def get_nth_digit(number, n):
return number // (10 ** n) % 10
def digit_mult_number(digit, number):
i = 0
cumsum = 0
carry = 0
while number // 10 ** i > 0:
nth_digit = get_nth_digit(number, i)
answer, carry = digit_mult_digit(nth_digit, digit, carry)
cumsum += answer * (10 ** i)
i += 1
return cumsum + carry * (10 ** i)
def number_mult_number(number1, number2):
i = 0
cumsum = 0
while number2 // 10 ** i > 0:
nth_digit = get_nth_digit(number2, i)
cumsum += digit_mult_number(nth_digit, number1) * (10 ** i)
i += 1
return cumsum
In [76]:
import numpy as np
In [83]:
# Tests
n = 100
ceiling = 1000
results = [
number_mult_number(number1, number2) == number1 * number2
for number1 in np.random.randint(1, ceiling, n)
for number2 in np.random.randint(1, ceiling, n)
]
np.all(results)
Out[83]:
In [ ]: