1.大数相加
思路:
两个数字转换为字符串,为了便于操作,分别逆转字符串,将短的字符串补上‘0’,使得长度相等。各个位分别相加,处理进位问题。最后再将结果倒置,从第一个不为0的字符开始输出
代码:
#reverse返回一个迭代器,用list()
s1=list(reversed(num1))
s2=list(reversed(num2))
if len(s1)>len(s2):
for i in range(len(s1)-len(s2)):
s2.append('0')
else:
for i in range(len(s2)-len(s1)):
s1.append('0')
print(s1,s2)
ans=[0]*(len(s1)+1)
for i in range(len(s1)):
sum = int(s1[i]) + int(s2[i])+ans[i]
if(sum>9):
ans[i+1]=ans[i+1]+sum//10
ans[i] = sum % 10
ans=list(reversed(ans))
print(ans)
i=0
flag=0
for i in range(len(ans)):
if ans[i] != 0 and flag==0:
break
if ans[i]!=0:
flag=1
else:
flag=0
while i<len(ans):
print(ans[i],end='')
i=i+1
2.大数相乘
思路:
与大数相加类似,模拟乘法,n位数*m位数,结果为n+m位数。先算出每一位的数,最后处理进位。
代码:
in1=input('').split(' ')
num1=in1[0];
num2=in1[1];
s1=list(reversed(num1))
s2=list(reversed(num2))
if len(s1)>len(s2):
for i in range(len(s1)-len(s2)):
s2.append('0')
else:
for i in range(len(s2)-len(s1)):
s1.append('0')
print(s1,s2)
ans=[0]*(max(len(s1),len(s2))*2)
for i in range(min(len(s1),len(s2))):
for j in range(max(len(s1),len(s2))):
if len(s1)>len(s2):
ans[i+j]+=int(s1[j])*int(s2[i])
else:
ans[i+j]+=int(s1[i])*int(s2[j])
#print(ans[i])
#print(ans)
for i in range(len(ans)):
temp=ans[i]
ans[i]=temp%10
if temp>9:
ans[i+1]+=temp//10
print(ans)
ans=list(reversed(ans))
print(ans)
i=0
flag=0
while 1:
if ans[i]!=0 and flag==0:
break
i+=1
#print(i)
while i!=len(ans):
print(ans[i],end='')
i+=1
3幂运算
思路:n**k,n*n循环k次,转为乘法
for i in range(k-1):
ans=bignumMul(ans,n)