【题目】
【思路】
输入是两个字符串形式的非负整数,返回乘积结果的字符串形式,不允许转换成整数再进行处理。即最简单直接return str(int(num1) * int(num2))
。
- 将num2每位依次乘以num1每位,再移位相加,先不处理进位情况
-
处理进位:
通过整除%和求余数\计算该位数和进位数,进位数加给前一位。 -
最后要删除res中前面的0
【python代码】
class Solution:
# @param num1, a string
# @param num2, a string
# @return a string
def multiply(self, num1, num2):
m = len(num1)
n = len(num2)
ans = [0 for i in range(m+n)]
if num1 == '0' or num2 =='0':
return '0'
for i in range(m-1,-1,-1):
for j in range(n-1,-1,-1):
ans[i+j+1] += int(num1[i])*int(num2[j])
res = []
for i in range(m+n-1,-1,-1):
digit = ans[i] % 10
carry = ans[i] // 10
res.insert(0, str(digit))
if i > 0:
ans[i-1] += carry
while res[0] == '0' and len(res) > 1:
del res[0]
return ''.join(res)
【结果】
#输入num1='123',num2="456"
56088
【做后思考】
- 看到别人有用divmod,直接得到取数和余数
#x是取整数,y是取余数
x,y = divmod(ans[i],10)
for i in range(num1[m-1],-1,-1)
num1从最后一个到第一个倒序循环。