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))