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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值