Python 在某个地方弄错了karatsuba乘法
因此,我是python新手,从karatsuba乘法的伪代码中编写了这段代码,并得到了某种逻辑错误 以下是我使用的伪代码:Python 在某个地方弄错了karatsuba乘法,python,algorithm,function,karatsuba,Python,Algorithm,Function,Karatsuba,因此,我是python新手,从karatsuba乘法的伪代码中编写了这段代码,并得到了某种逻辑错误 以下是我使用的伪代码: procedure karatsuba(num1, num2) if (num1 < 10) or (num2 < 10) return num1*num2 /* calculates the size of the numbers */ m = max(size_base10(num1), size_base10(num2))
procedure karatsuba(num1, num2)
if (num1 < 10) or (num2 < 10)
return num1*num2
/* calculates the size of the numbers */
m = max(size_base10(num1), size_base10(num2))
m2 = m/2
/* split the digit sequences about the middle */
high1, low1 = split_at(num1, m2)
high2, low2 = split_at(num2, m2)
/* 3 calls made to numbers approximately half the size */
z0 = karatsuba(low1,low2)
z1 = karatsuba((low1+high1),(low2+high2))
z2 = karatsuba(high1,high2)
return (z2*10^(2*m2))+((z1-z2-z0)*10^(m2))+(z0)
程序karatsuba(num1,num2)
如果(num1<10)或(num2<10)
返回num1*num2
/*计算数字的大小*/
m=最大值(尺寸基准10(num1),尺寸基准10(num2))
m2=m/2
/*在中间拆分数字序列*/
高1,低1=在(num1,m2)处拆分
高2,低2=在(num2,m2)处拆分
/*打3个电话给大约一半大小的号码*/
z0=喀拉祖巴(低1,低2)
z1=karatsuba((低1+高1),(低2+高2))
z2=karatsuba(高1,高2)
返回(z2*10^(2*m2))+((z1-z2-z0)*10^(m2))+(z0)
下面是它的python代码:
def mul(n1,n2):
if n1<10 or n2<10:
return n1*n2
l = max(len(str(n1)),len(str(n2)))
print(l)
half = l//2
print(half)
f1 = int(str(n1)[:half])
print("f1",f1)
l1 = int(str(n1)[half:])
print("l1",l1)
f2 = int(str(n2)[:half])
print("f2",f2)
l2 = int(str(n2)[half:])
print("l2",l2)
c = mul(l1,l2)
print("c",c)
b = mul((l1+f1),(l2+f2))
print("b",b)
a = mul(f1,f2)
print("a",a)
return ((a*10^(2*half))+((b-a-c)*10^(half))+c)
var = mul(44,21)
print(var)
def mul(n1,n2):
如果n1您的问题可能来自您使用的求幂运算符。注意
^
是操作员
当
**
用于求幂
>>> 2**3
8
或者,您可以使用内置函数
它告诉您,带有a=mul(f1+f2)
的行有问题,因为您还需要一个参数才能使用该函数。a=mul(f1+f2)
非常感谢快速回复的家伙。我想问题出在您的求幂运算符^
上。使用**
。您应该报告完整的错误跟踪,以最大限度地提高获得答案的机会。也不要像以前那样改变你的问题,发布另一个。@Kanak发布你的消息作为他问题的答案,这样你就可以得到解决他的问题的分数。
>>> pow(2, 3)
8