小声bb,直接int()多好 = =
既然题目要求不能直接用Int(),我只好开动我的大脑开始想有什么解决方案。然后首先想到的就是小学时候老师教乘法时用乘式写法。
1 2 3
* 4 5
---------
6 1 5
4 9 2
---------
5 5 3 5
哎,看起来不错啊!我就寻思着这么算吧。然后再一想,也不对啊,这还不是要把一个数化为整数的格式吗,好像和把两个数都化为整数然后计算没有什么大区别吧。于是乎,我就去评论区翻了翻,找到了这个:
1 2 3
* 4 5
---------
1 5
1 0
0 5
---------
0 6 1 5
1 2
0 8
0 4
---------
0 5 5 3 5
我们就可以一位一位的计算了。。。(话说我为什么不多想一会再去找答案呢= =)
下面是代码:
执行用时: 332 ms, 在Multiply Strings的Python3提交中击败了16.89% 的用户 |
---|
内存消耗: 13.3 MB, 在Multiply Strings的Python3提交中击败了0.68% 的用户 |
class Solution:
def multiply(self, num1: str, num2: str) -> str:
i = 1 #乘数标志位(从右向左)
j = 1 #被乘数标志位(从右向左)
nums = 0 #存放最终结果
nums_2 = [] #存放某一位乘数与整个被乘数成绩的结果
while i <= len(num2):
nums_1 = [] #存放某位乘数对所有被乘数按位依次乘积的结果(一位数对一位数的乘积)
nums_sum = 0 #计算某一位乘数与整个被乘数成绩的结果
while j <= len(num1):
nums_1.append(int(num1[-j])*int(num2[-i])*pow(10,j-1))
j += 1
for x in nums_1:
nums_sum += x
nums_2.append(nums_sum*pow(10,i-1))
i += 1
j = 1
for y in nums_2:
nums += y
return str(nums)