python - 为什么此代码在 karatsuba 乘法中返回负答案
问题描述
"""karatsuba algo"""
def fast(x,y):
if len(str(x))==1 or len(str(y))==1:
return x*y
else:
n = max(len(str(x)),len(str(y)))
m = n//2
a = x//10**m
b = x%10**m
c = y//10**m
d = y%10**m
k = fast(a,c)
n = fast((a+b),(c+d))
o = fast(b,d)
return (10**2*m*k) +(10**m*(n-k-o))+(o)
print(fast(10515610,5651551460))
python不应该有任何溢出问题。那么为什么当输入很大时它会返回负答案?
解决方案
查看原始算法,您的代码应该是
return (10**(2*m)*k) +(10**m*(n-k-o))+(o)
查看周围的附加括号(2*m)
。否则,您将乘以 m 而不是提高幂。
您可以通过用10**m
新变量替换所有位来使其更具可读性和效率
推荐阅读
- java - 编译 gremlin 遍历查询的响应
- c++ - 假想CPU解码指令
- python - 如何通过 OCR 将扫描的 PDF 转换为 Excel?
- json - Elasticsearch.NET (NEST) 在版本 7.x 中无法反序列化我的 POCO JSON
- laravel - 适用于 Windows 10 上 PHP 7.3 的 Apache Cassandra 驱动程序,带有 Laravel 5.8
- selenium - isDisplayed() 不工作,正在使用 pagefactory
- ios - 如何在 UICollectionViewHeader 中添加 UIView (swift 5)
- django - 'QueryDict' 对象没有属性 'first_name'
- python - 裁剪多边形并将其转换为灰度
- java - Maven version:update 不更新给定版本,它与 repo 比较并更新到最新而不是给定版本