高精度——加法 python3

高精度——加法
题目:
给定两个正整数(不含前导 0),计算它们的和。

输入格式
共两行,每行包含一个整数。

输出格式
共一行,包含所求的和。

数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35

#高精度:针对整数
#A+B 两个大整数相加 A和B的位数大概10^6
#A-B 两个大整数相减 A和B的位数大概10^6
#A*a 大整数×小整数 A位数<=10^6, a的数值<=10^9
#A/a
#A*B和A/B这两个不咋考

#在C++中大整数用int存不下来,可以把每一位存到数组里面【Python中大整数的运算不会溢出
#如123456789存在列表中,列表下标从0到9,最好分别存数字987654321,也就是倒着存,即:
#下标:0 1 2 3 4 5 6 7 8
#数  :9 8 7 6 5 4 3 2 1
#因为数加法等存在进位的问题,列表的后面补数字更容易

#高精度加法:
#  A3 A2 A1 A0
#+    B2 B1 B0
#= C3 C2 C1 C0   Ci=Ai+Bi+ti, t表示进位,有进位则=1(两个小10的数相加进位最多1,不会2+),没进位=0
#若Ai Bi不存在则=0,  代码判断如果写不太好 可以用两个代码先如果i的<A的长度,则说明i位有数字则+Ai,再针对Bi写一下
# 再看有没有进位,有在高位上补1


#本质上python中以下就行:
# A=int(input())
# B=int(input())
# print(A+B)

#python虽然有大整数,但是有些题目要求不能用,还是要学习一个  如下
import audioop


def ADD(A, B):
    t=0#t表示进位  一开始个位数没有进位=0
    i=0#列表下标
    C=[]
    while i<len(A) or i<len(B):#要等于号 因为最高位可能还有进位,不不不,不能有等号,如果有等号且前一刻t=0后面C还会继续append前面的t=0,列表数字会变大的,这可以在循环之后考虑
        if i<len(A): t=t+A[i]
        if i<len(B): t=t+B[i]#不能直接t=t+A[i]+B[i] :假如A[i]没数字就不能运行了
        C.append(t%10)
        t=t//10#加好的进位
        i+=1
    if t==1: C.append(t%10)#考虑进位,一定在循环之后考虑,因为要先判断t是否=1,再决定要不要append

    #C是逆序的列表,要返回一个顺序的数字
    # for i in range(len(C)//2):#这是//,如果不加,相当于逆序两次等于没变
    #     C[i],C[len(C)-i-1]=C[len(C)-i-1],C[i]#C逆序回来
    C.reverse()#列表逆序,直接这样就行 也可以C=C[::-1]
    C="".join(map(str,C))#列表变成字符串数!
    return C


if __name__=="__main__":
    #先字符串,再逆序成列表[方法有点麻烦]
    # A_str=input("A\n")
    # B_str=input("B\n")
    # A_list=[]
    # B_list=[]
    # for i in range(len(A_str)): A_list.append(int(A_str[len(A_str)-i-1]))#字符串也可以用下标取  注意要int化  下标注意len(A_str)-i-1  若遇到下标没和len相遇一定注意要不要+-1
    # for i in range(len(B_str)): B_list.append(int(B_str[len(B_str)-i-1]))

    #逆序直接reverse或者str
    A_list=list(map(int,input("A\n")))
    B_list = list(map(int, input("B\n")))
    A_list.reverse()
    B_list.reverse()
    #如果一个数(12得到12),直接int+input就行;
    #如果很多个小于10的数不间隔输入(12得到1 2),直接list+map+int+input(且不能输入12 23,会报错)
    #如果多个数间隔输入(12 23得到12 23),则list+map+int+input+split       #split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,默认为所有的空字符.这些子串会被保存到列表中(不包含分隔符)
    print(ADD(A_list,B_list))
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值