大整數乘法python3實現

2021-09-06 21:16:25 字數 1201 閱讀 5353

因為python具有無限精度的int型別,所以用python實現大整數乘法是沒意義的,可是思想是一樣的。利用的規律是:第乙個數的第i位和第二個數大第j位相乘,一定累加到結果的第i+j位上,這裡是從0位置開始算的。**例如以下:

import sys

def list2str(li):

while li[0]==0:

del li[0]

res=''

for i in li:

res+=str(i)

return res

def multi(stra,strb):

aa=list(stra)

bb=list(strb)

lena=len(stra)

lenb=len(strb)

result=[0 for i in range(lena+lenb)]

for i in range(lena):

for j in range(lenb):

result[lena-i-1+lenb-j-1]+=int(aa[i])*int(bb[j])

for i in range(len(result)-1):

if result[i]>=10:

result[i+1]+=result[i]//10

result[i]=result[i]%10

return list2str(result[::-1])

if __name__=='__main__':

if len(sys.argv)!=3:

print('請輸入兩個引數')

exit()

a=sys.argv[1]

b=sys.argv[2]

res=multi(a,b)

print('multi',res)

print('ok',int(a)*int(b))

multi函式是大整數相乘的主函式,輸入是字串格式的兩個大整數,輸出是字串格式的結果;list2str函式是把包括每一位數字的list轉換成str,並把最高位佔位用的0刪除。輸出結果例如以下:

multi後邊跟的是用普通大整數思想計算的結果,ok後邊跟的是python自己直接計算的相乘結果,用於對照結果。

大整數乘法python3實現

由於python具有無限精度的int型別,所以用python實現大整數乘法是沒意義的,但是思想是一樣的。利用的規律是 第乙個數的第i位和第二個數大第j位相乘,一定累加到結果的第i j位上,這裡是從0位置開始算的。如下 import sys def list2str li while li 0 0 d...

Python 實現大整數乘法演算法

我們平時接觸的長乘法,按位相乘,是一種時間複雜度為 o n 2 的演算法。今天,我們來介紹一種時間複雜度為 o n log 3 的大整數乘法 log 表示以 2 為底的對數 介紹原理 karatsuba 演算法要求乘數與被乘數要滿足以下幾個條件,第一,乘數與被乘數的位數相同 第二,乘數與被乘數的位數...

C 實現大整數乘法

演算法競賽入門經典 這本書並沒有對大數乘法實現,所以自己補充了一下,乘法的實現很簡單,就是再其資料結構基礎上把每寬為8位的十進位制數看成多項式的係數,vector的下標看成多項式的指數,然後再對應相乘相加就可以了,注意係數超過8位 將超八位的補分進製。我這裡是笛卡爾相乘。一般來說是夠用的。但其實多項...