大数相乘,顾名思义就是两个很大的数相乘,不能用系统自带的函数去处理,你怎么解决它?(比如:2322424*3156357)
这一题的思路是,就是按最原始的乘法,竖着的计算方法去进行处理。
如下图:
按照上面的思路,代码如下:
def mul(a,b):
a.reverse() #数据放到列表中,因为要从个位相乘,所以要反转列表
b.reverse()
res = [0 for i in range(len(a)+len(b))] #长度默认两数长度和
for j in range(len(a)):
for k in range(len(b)): #两个for循环,两两相乘,先不进位
res[j+k] += a[j] * b[k] #把相同位置的相加,还不进位
for m in range(len(res)): #这个for循环就是为了去进位
if res[m] > 9:
res[m+1] = res[m+1] + res[m]//10 #商放到下一位
res[m] = res[m] % 10 #余数留下来
res.reverse() #再反转就ok了
if res[0] == 0: #可能首位会为0,把0去掉就ok了
return res[1:]
else:
return res
print(mul([1,2,3],[4,5,6])) #结果[5, 6, 0, 8, 8]