大数乘法
Last updated
Last updated
问题简述
以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。
http://
思路1:模拟
以 54 * 68 为例:
54
x 68
-----
用 tmp 记录每一步的结果
8 * 4 = 32 tmp = [32]
8 * 5 = 40 tmp = [40, 32]
6 * 4 = 24 tmp = [40 + 24, 32]
6 * 5 = 30 tmp = [30, 40 + 24, 32]
得到 tmp 后做循环进位加法即可,详见代码;
示例中按照手算习惯是从低位开始算起的,实际因为各位之间互相独立,从高位开始也可以,详见代码;
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param s string字符串 第一个整数
# @param t string字符串 第二个整数
# @return string字符串
#
class Solution:
def solve(self , s: str, t: str) -> str:
from collections import deque
# write code here
tmp = []
# 从高位开始算起
for i, a in enumerate(s):
for j, b in enumerate(t):
c = int(a) * int(b)
if i + j == len(tmp):
tmp.append(c)
else:
tmp[i + j] += c
ret = deque()
add = 0 # 进位
for x in tmp[::-1]: # 因为要考虑进位,所以从低位开始算起,即逆序遍历
x += add
add = x // 10
ret.appendleft(str(x % 10)) # 这里也可以直接拼字符串,不过推荐用队列
if add:
ret.appendleft(str(add))
return ''.join(ret)