日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python长整数相乘_python写的大整数相乘的方法

發(fā)布時(shí)間:2023/12/3 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python长整数相乘_python写的大整数相乘的方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

輸入

72106547548473106236 982161082972751393 兩個(gè)大整數(shù)

輸出結(jié)果

70820244829634538040848656466105986748

解題思路

首先根據(jù) 大整數(shù)相乘的原理的基礎(chǔ)上,把大整數(shù)進(jìn)行優(yōu)化拆分,拆分的長(zhǎng)度,要考慮語(yǔ)言中整形的長(zhǎng)度。這里用的python,其實(shí)可以直接乘的,呵呵。

我暫定設(shè)為了 4,也就是 說(shuō)

7210 6547 5484 7310 6236

98 2161 0829 7275 1393

然后 逐份相乘,當(dāng)然千萬(wàn)別忘了結(jié)果要補(bǔ)零。 例如 當(dāng) 7310 * 7275 結(jié)果一定要補(bǔ)上8個(gè)零。

最后 將每一步的結(jié)果直接相加就可以了。

里面寫了一個(gè)函數(shù) xiangjia,就是用于大整數(shù)相加的。沒(méi)做優(yōu)化,其實(shí)也是可以每隔幾位 ,分割開的。

# hh=input()

hh=‘72106547548473106236 982161082972751393‘

zonglen=len(hh)-1

a=hh.split()

tiqu=4 #提取位數(shù),大小取決于內(nèi)存中 int型位數(shù),我這里隨便寫的。因?yàn)閜ython,其實(shí)沒(méi)有限制。

#大整數(shù)相加的函數(shù),沒(méi)做優(yōu)化 沒(méi)做分割

def xiangjia(a1,b1):

lista=list(a1[::-1]) #翻轉(zhuǎn)

listb=list(b1[::-1])

list_resu=[]

yu9=0

resu9=0

for x in range(max(len(a1),len(b1))): #取最長(zhǎng)的數(shù),循環(huán)

if x

ax_temp=int(lista[x])

else:

ax_temp=0 #千萬(wàn)別超出索引范圍

if x

bx_temp=int(listb[x])

else:

bx_temp=0

resu9=(ax_temp+bx_temp+yu9)%10 #進(jìn)位

yu9=(ax_temp+bx_temp+yu9)//10 #余數(shù)

list_resu.append(resu9)

if yu9>0:

list_resu.append(yu9) #循環(huán)完了后,如果還有余數(shù),繼續(xù)添加

#轉(zhuǎn)化成正常序列

resu8=‘‘

for x in list_resu[::-1]:

resu8+=str(x)

return resu8

#創(chuàng)建空l(shuí)ist_sum

result0=‘‘

#開始遍歷

#取長(zhǎng)度

a0_len=len(a[0])

a1_len=len(a[1])

#取除結(jié)果

chu0=a0_len//tiqu

chu1=a1_len//tiqu

#取余

yu0=a0_len%tiqu

yu1=a1_len%tiqu

x=0

y=0

while chu1-y>=0:

x=0

while chu0-x>=0:

if chu0-x>0:

cheng0=int(a[0][-(1+x*tiqu):-(tiqu+1+x*tiqu):-1][::-1])

else:

if yu0>0:

cheng0=int(a[0][0:yu0])

else:

break

if chu1-y>0:

cheng1=int(a[1][-(1+y*tiqu):-(tiqu+1+y*tiqu):-1][::-1])

else:

if yu1>0:

cheng1=int(a[1][0:yu1])

else:

break

temp_resu=str(cheng0*cheng1)+‘0‘*x*tiqu+‘0‘*y*tiqu

result0=xiangjia(result0,temp_resu)

x+=1

y+=1

print(result0)

這是優(yōu)化前的一版,完全按照手工計(jì)算的豎式方式編的,僅供參考。

hh=input()

zonglen=len(hh)-1

a=hh.split()

#創(chuàng)建空l(shuí)ist_sum

list_sum=[]

for x in range(zonglen-1):

list_sum.append(0)

p=0 #空位

for x in a[1][::-1]: #遍歷第二個(gè)大數(shù) 翻轉(zhuǎn)遍歷

list0=[]

for y in a[0][::-1]: #遍歷第一個(gè)大數(shù) 翻轉(zhuǎn)遍歷

list0.insert(0,int(x)*int(y))

#移位相加

n=len(list0)

for g in range(n):

list_sum[zonglen-1-g-1-p]+=list0[n-g-1]

p+=1

#求和

m=0 #進(jìn)位數(shù)

n=len(list_sum)

for z in range(n): #進(jìn)位

list_sum[n-z-1]+=m

m=0

if list_sum[n-z-1]>=10:

m=list_sum[n-z-1]//10

list_sum[n-z-1]=list_sum[n-z-1]%10

if m>0: #高位補(bǔ)數(shù) 進(jìn)位

list_sum.insert(0,m)

#轉(zhuǎn)字符串輸出

result=‘‘

for x in list_sum:

result+=str(x)

print(result)

總結(jié)

以上是生活随笔為你收集整理的python长整数相乘_python写的大整数相乘的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。