高精度_乘法 python3

p4_3_高精度_乘法
题目:
给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。

输入格式
共两行,第一行包含整数 A,第二行包含整数 B。

输出格式
共一行,包含 A×B 的值。

数据范围
1≤A的长度≤100000,
0≤B≤10000
输入样例:
2
3
输出样例:
6

#   A5 A4 A3 A2 A1
#x               b    b较小 b可以是2+位数,把b看成整体
#=
#个位C0=(A0xb)%10 进位t=(A0xb)//10    C0算出来可能不止两位数,但可以一直迭代进位
#十位C1=(A1xb+t)%10  进位t=(A1xb+t)//10

#如 A=1 2 3
#   b    12
#C0=(3*12)%10=6,进t1=3
#C1=(2*12+t1)%10=7, 进t2=2
#C2=(1*12+2)%10=4,进t3=1
#C3=1
#C=1476
def MUL(A,b):
    C=[]
    t=0 #进位
    for i in range(len(A)):#不能中是i<len(A)
        t+=A[i]*b
        C.append(t%10)
        t=t//10
    # while t!=0: #也可以按之前的逻辑来搞循环
    #     C.append(t % 10)
    #     t = t // 10
    if t: C.append(t) #算完A可能还有进位,此时进位t即使是2+位数 也可以直接append到C中不影响最后结果 所以直接一个判断句if 就行 不需要while
    #其实也可以把for改成while i<len(A) or t!=0,直接在循环中把两个条件结合在一起,如果这样先得判断i<len(A) 才能t+=A[i]*b,本质上就是把现在的for和注释的while语句结合在一起
    while len(C)>1 and C[-1]==0: C.pop()#加入b=0,要去前导0
    C=''.join(map(str,C[::-1]))
    return C

if __name__=="__main__":
    A=list(map(int,input("A\n")))[::-1]
    b=int(input("b\n"))
    print(MUL(A,b))


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值