题目描述:
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目要求不能直接转化为整数计算,不然一行代码解决
整体思路是将其中一个数与第二个数的每一位相乘,再加上相应位数的0,最后加起来,在计算乘法和加法时,要注意进位。
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1=='0' or num2=='0':
return '0'
l1=len(num1)
l2=len(num2)
if l1<l2:
num1,num2=num2,num1
l1,l2=l2,l1
str1=[]
for i in range(l2):
str1.append(self.mutiple(num1,num2[i]))
if len(str1)==1:
return str1[0]
return self.add(str1)
def mutiple(self,s1,s2):
flag=0
str2=''
for i in range(len(s1)-1,-1,-1):
temp=int(s1[i])*int(s2)+flag
str2+=str(temp%10)
if temp>=10:
flag=temp//10
if i==0:
str2+=str(temp//10)
else:
flag=0
return str2[::-1]
def add(self,str):
num=''
for i in range(len(str)):
for j in range(len(str)-1-i):
str[i]+='0'
for i in range(len(str)):
num=self.addtwo(num,str[i])
return num
def addtwo(self,s1,s2):
length1=len(s1)
length2=len(s2)
flag=0
str3=''
if length1>length2:
l=length1-length2
for i in range(l):
s2='0'+s2
else:
l=length2-length1
for i in range(l):
s1='0'+s1
for i in range(max(length1,length2)-1,-1,-1):
s=int(s1[i])+int(s2[i])+flag
str3+=str(s%10)
if s>=10:
flag=1
if i==0:
str3+=str(s//10)
else:
flag=0
return str3[::-1]