输入
72106547548473106236 982161082972751393 两个大整数
输出结果
70820244829634538040848656466105986748
解题思路
首先根据 大整数相乘的原理的基础上,把大整数进行优化拆分,拆分的长度,要考虑语言中整形的长度。这里用的python,其实可以直接乘的,呵呵。
我暂定设为了 4,也就是 说
7210 6547 5484 7310 6236
98 2161 0829 7275 1393
然后 逐份相乘,当然千万别忘了结果要补零。 例如 当 7310 * 7275 结果一定要补上8个零。
最后 将每一步的结果直接相加就可以了。
里面写了一个函数 xiangjia,就是用于大整数相加的。没做优化,其实也是可以每隔几位 ,分割开的。
# hh=input()
hh='72106547548473106236 982161082972751393'
zonglen=len(hh)-1
a=hh.split()
tiqu=4 #提取位数,大小取决于内存中 int型位数,我这里随便写的。因为python,其实没有限制。
#大整数相加的函数,没做优化 没做分割
def xiangjia(a1,b1):
lista=list(a1[::-1]) #翻转
listb=list(b1[::-1])
list_resu=[]
yu9=0
resu9=0
for x in range(max(len(a1),len(b1))): #取最长的数,循环
if x
ax_temp=int(lista[x])
else:
ax_temp=0 #千万别超出索引范围
if x
bx_temp=int(listb[x])
else:
bx_temp=0
resu9=(ax_temp+bx_temp+yu9)%10 #进位
yu9=(ax_temp+bx_temp+yu9)//10 #余数
list_resu.append(resu9)
if yu9>0:
list_resu.append(yu9) #循环完了后,如果还有余数,继续添加
#转化成正常序列
resu8=''
for x in list_resu[::-1]:
resu8+=str(x)
return resu8
#创建空list_sum
result0=''
#开始遍历
#取长度
a0_len=len(a[0])
a1_len=len(a[1])
#取除结果
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)
这是优化前的一版,完全按照手工计算的竖式方式编的,仅供参考。
hh=input()
zonglen=len(hh)-1
a=hh.split()
#创建空list_sum
list_sum=[]
for x in range(zonglen-1):
list_sum.append(0)
p=0 #空位
for x in a[1][::-1]: #遍历第二个大数 翻转遍历
list0=[]
for y in a[0][::-1]: #遍历第一个大数 翻转遍历
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 #进位数
n=len(list_sum)
for z in range(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: #高位补数 进位
list_sum.insert(0,m)
#转字符串输出
result=''
for x in list_sum:
result+=str(x)
print(result)