首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码Karatsuba乘法

编码Karatsuba乘法
EN

Stack Overflow用户
提问于 2021-01-06 09:28:11
回答 1查看 32关注 0票数 0

如果任何一个数字的长度是偶数,我下面的代码似乎工作得很好,但是如果两个数字的长度都是奇数(就像在图片中一样),它就会输出错误的结果。我不知道哪里出了问题,也不知道如何修复它。

代码语言:javascript
复制
def karatsubaMulti(num1, num2):
    len1 = len(str(num1))
    len2 = len(str(num2))

    if len1==1 or len2==1:
        return num1*num2

    else:
        maxLen = max(len1, len2)

        if maxLen > len1:
            a=0
            b=num1
        else:
            a = num1 // pow(10, maxLen//2)
            b = num1 %  pow(10, maxLen//2)

        if maxLen > len2:
            c=0
            d=num2
        else:
            c = num2 // pow(10, maxLen//2)
            d = num2 % pow(10, maxLen//2)
        z1 = karatsubaMulti(a, c)
        z2 = karatsubaMulti(b, d)
        z3 = karatsubaMulti(a+b, c+d)
        return z1 * pow(10, maxLen) + (z3-z1-z2) * pow(10, maxLen//2) + z2
x = 171
y = 571

xy1 = karatsubaMulti(x, y)

print(xy1)
EN

回答 1

Stack Overflow用户

发布于 2021-01-06 11:17:02

仔细查看公式,将其与正确的公式进行比较,您会发现pow(10, maxLen//2)的平方不是pow(10, maxLen)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65588943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档