文章目录

题目描述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:

输入: num1 = “123”, num2 = “456”
输出: “56088”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路分析:

下面有要求,不能直接变成整数做,毕竟是个中等题。。

模拟乘法。
比如 123456
123
6 + 123* 50 + 123400
再分解 123
6 分解成 63 + 620 + 6*100

按照这个思路,注意细节和进位就行了~~~
代码写的比较乱,做个参考。。。

完整代码

class Solution:
def multiply(self, num1: str, num2: str) -> str:
res = []
if num1 == '0' or num2 == '0':
return '0'
num1 = num1[::-1]
num2 = num2[::-1]
temp = 1
carry = 0
for i in range(len(num1)):
ans = []
in_carry = 1
for j in range(len(num2)):
summ = int(num1[i]) * int(num2[j])
summ += carry
if summ >= 10:
if j == len(num2) - 1:
ans.append(summ * in_carry)
carry = 0
else:
quo, rem = divmod(summ, 10)
carry = quo
ans.append(rem * in_carry)
else:
ans.append(summ * in_carry)
carry = 0
in_carry *= 10
res.append(sum(ans) * temp)
temp *= 10

return str(sum(res))