[英]Own implementation of Karatsuba algorithm
大家好,我正在嘗試提出自己的 Karatsuba 乘法算法實現,其中當一個數字是單個數字時,基本情況是微不足道的乘法。 我的代碼似乎無法產生正確的答案,我相信這與 z1 的計算方式有關,但我無法弄清楚,請幫助我。
import math
x = input()
y = input()
def suba(x,y):
if len(x) == 1 or len(y) == 1:
x = int(x)
y = int(y)
return x*y
else:
n = int(math.ceil((min(len(x),len(y)))/2))
h1 = x[0:n]
l1 = x[n:len(x)]
h2 = y[0:n]
l2 = y[n:len(y)]
z0 = suba(l1,l2)
z1 = suba(str(int(l1)+int(h1)),str(int(l2)+int(h2)))
z2 = suba(h1,h2)
return (z2*10**(n*2))+((z1-z2-z0)*10**(n))+z0
print(suba(x,y))
問題在於分裂。 您需要以這樣的方式拆分低(右)部分的大小為n 。 這是必要的,因為x和y的高部分必須是可比較的:它們必須是通過除以 10 的相同冪來提取的。
所以將拆分代碼更改為:
h1 = x[:-n]
l1 = x[-n:]
h2 = y[:-n]
l2 = y[-n:]
另請注意,不必為范圍的開頭指定 0,也不必為范圍的結尾指定長度,因為這些是默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.