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))

因此,我是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))
  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