43.字符串相乘

小声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)
上一篇:python中numpy库内multiply()、dot()和 * 三种乘法运算的区别小计


下一篇:multiply对应位置相乘 与 dot矩阵乘