小编ken*_*ken的帖子

我想在python中实现唐叶乘法

我想在python中实现Karatsuba乘法。

但是当数字很大时,我得到了正确的答案。

谁能告诉我我的代码哪里错了?

当 x 非常大时,唐叶乘法实现是不正确的。

import math
def fun1(x,y):
    if x <= 100  or y<=100:
        return x*y
    else:
        n = int(math.log10(x)) + 1
        print(n)
        #split x
        a = int(x//(10**int(n/2)))
        b = int(x%(10**int(n/2)))
        #split y
        c = int(y//(10**int(n/2)))
        d = int(y%(10**int(n/2)) )
        print('=======')
        print(a,b,c,d)
        s1 = fun1(a,c)
        s2 = fun1(b,d)
        s3 = fun1(a+b, c+d) - s1 -s2

        return 10**(n) * s1 + 10**int(n/2) * s3 + s2
x = 3141592653589793238462643383279502884197169399375105820974944592
y = 3141592653589793238462643383279502884197169399375105820974944592
res = fun1(x,y)
print(res)
Run Code Online (Sandbox Code Playgroud)

结果对比如下: …

python algorithm karatsuba

2
推荐指数
1
解决办法
867
查看次数

标签 统计

algorithm ×1

karatsuba ×1

python ×1