python實現高精度乘法
阿新 • • 發佈:2019-01-05
方法是將兩個乘數轉為兩個包含乘數每位數字的list,
因為在計算中兩個list中的資料要反覆使用,所以定義第三個list來儲存乘法的運算結果,然後使用兩重循序模擬列豎式計算出乘法運算的結果, 因為乘法運算每次運算時需要向前移動一位表示擴大10倍,所以定義變數pos標記計算時移動的位數, 每次移動一位
from functools import reduce
def multiply(a, b):
a = list(map(lambda x : int(x), a.strip()))
b = list(map(lambda x : int(x), b.strip()))
c = list(map(lambda x : 0, ("0" + str(a) + str(b)).strip()))
index = len(c) - 1;
for i in range(len(a) - 1, -1, -1):
pos = 0
for j in range(len(b) - 1, -1, -1):
temp = a[i] * b[j] + c[index - pos] #兩個乘數相乘,並加上在此前一次的進位
c[index - pos] = temp % 10 #儲存運算求餘結果
c[index - pos - 1 ] += temp // 10 #處理進位,進位可以是0或者大於0的數
pos += 1
index -= 1
return int(reduce(lambda x, y : str(x) + str(y), c)) #將list中的內容轉換為字串
a = input("input a: ")
b = input("input b: ")
print(multiply(a, b))