我开始了一门新的算法课程。这位教授正试图用其他规则创建一个乘法算法。
例如,他将我们试图乘的数字的数字分成两组。x = 3452然后是a = 34,b = 52 (同样适用于y)。

据他说,基本行动是:
,如果给你两个数字,每个数字只有一个数字。然后,在一个基本操作中将它们相乘,并返回结果。
如果ac、ad、bc和bd是非常简单的操作,您将如何递归地计算这些操作?
发布于 2020-05-31 21:06:02
下面是如何为karatsuba编写代码(用python编写)(假设x和y的偶数总是相同的):
def numDigits(x):
"""
Returns the number of digits in x
"""
if x == 0:
return 1
digits = 0
while x >= 1:
x = int(x / 10)
digits+=1
return digits
def multiply(x, y):
x_digits = numDigits(x)
y_digits = numDigits(y)
if x_digits != y_digits:
return -1 # not valid
n = x_digits
if n == 1: # checks if x (and y) are only 1 digit
return x*y # single digit multiplication
half_n = int(n / 2)
a = int(x / (10**half_n))
b = x - (a*(10**half_n))
c = int(y / (10**half_n))
d = y - (c*(10**half_n))
ac = multiply(a, c)
ad = multiply(a, d)
bc = multiply(b, c)
bd = multiply(b, d)
return (10**n)*ac + (10**half_n)*(ad + bc) + bd
assert multiply(1, 2) == 2
assert multiply(10, 20) == 200
assert multiply(15, 21) == 315
assert multiply(1710, 2450) == 4189500
print("all pass!")您可以修改代码,允许x和y有奇数的数字,并具有不同的长度,需要做更多的工作。
https://stackoverflow.com/questions/62121957
复制相似问题