HJ57 高精度整数加法【python3】

题目描述

输入两个用字符串 str 表示的整数,求它们所表示的数之和。

数据范围: 1 ≤ l e n ( s t r ) ≤ 10000 1 \le len(str) \le 10000 1len(str)10000

输入描述

输入两个字符串。保证字符串只含有’0’~'9’字符

输出描述

输出求和后的结果

代码&思路

  1. 在现实中做竖式运算的时候,也是上长下短比较方便,因此初步思路是先判断出两个整数的长短。
  2. 竖式运算关键在于进位,用列表记录两个整数的每一位数,并且长的那个整数一并记录进位标志。0不进位,1进位。由于运算是从个位开始,因此列表还需要逆序处理。
  3. 细分运算过程中可能会遇到的情况,从个位/列表第一个数开始做加法。大分类是分两个整数长度相同和长度不同两种情况
  4. 两个整数的每一位与该位的进位标识对应相加,更新下一位的进位标志,以及相加后的当前位置的数值。要注意长整数的最后一位若需进位,结果还需要进1
  5. 而对于两个整数长度不等的情况,还要处理超出短整数位数但不是长整数最后一位的情况
s1,s2=input(),input()
n1,n2=len(s1),len(s2)
# 判断位数多的那个大数
if n1<n2:
   tmp=s1
   s1=s2
   s2=tmp
   n1,n2=len(s1),len(s2)
# 0不进位 1进位 从个位开始相加
a=[[int(x),0] for x in s1]
b=[int(x) for x in s2]
a.reverse()
b.reverse()

# n1==n2
if n1==n2:
   for i in range(n2):
       if i<n2-1:
           if a[i][0]+b[i]+a[i][1]>=10:
               a[i+1][1]=1
               a[i][0]=a[i][0]+b[i]+a[i][1]-10
           else:
               a[i][0]=a[i][0]+b[i]+a[i][1]
       else:
           if a[i][0]+b[i]+a[i][1]>=10:
               a[i][0]=a[i][0]+b[i]+a[i][1]-10
               a.append([1,0])
           else:
               a[i][0]=a[i][0]+b[i]+a[i][1]
if n1>n2:
   for i in range(n2):
       if a[i][0]+b[i]+a[i][1]>=10:
               a[i+1][1]=1
               a[i][0]=a[i][0]+b[i]+a[i][1]-10
       else:
           a[i][0]=a[i][0]+b[i]+a[i][1]
   for i in range(n2,n1,1):
       if i<n1-1:
           if a[i][0]+a[i][1]>=10:
               a[i][0]=a[i][0]+a[i][1]-10
               a[i+1][1]=1
           else:
               a[i][0]=a[i][0]+a[i][1]
       else:
           if a[i][0]+a[i][1]>=10:
               a[i][0]=a[i][0]+a[i][1]-10
               a.append([1,0])
           else:
               a[i][0]=a[i][0]+a[i][1]

a.reverse()
for i in range(len(a)):
   print(a[i][0],end='')







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值