题目
基本思路
这是典型的大数相乘的题目,主要有以下三步:
1. 先将两个字符串进行反转
2. 两个字符串按位相乘,将结果保存在一个数组里面
3. 对数组中的每一位对10取余,余数即为这一位的数,然后对10地板除,求得进位的数
注意:最后要将相乘后字符串前面的0去掉
代码
class Solution:
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
num1 = num1[::-1]
num2 = num2[::-1]
ansarr = [0 for i in range(len(num1)+len(num2))]
for i in range(len(num1)):
for j in range(len(num2)):
ansarr[i+j] += int(num1[i]) * int(num2[j])
ans = []
for i in range(len(ansarr)):
digit = ansarr[i] % 10
carry = ansarr[i] // 10
if i < len(ansarr)-1:
ansarr[i+1] += carry
ans.insert(0,str(digit))
while ans[0] == '0' and len(ans) > 1:
del ans[0]
return ''.join(ans)
运行结果
311 / 311 test cases passed.
Status: Accepted
Runtime: 152 ms
知识积累
Python中的 // 与 / 的区别
” / ” 表示浮点数除法,返回浮点结果;
” // ” 表示整数除法,返回不大于结果的一个最大的整数