给定两个以字符串形式表示的非负整数
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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解1 2021/9/6 O(?)
def multiply(num1: str, num2: str) -> str:
'''
38397
* 123
---------
115191
76794 //这里可以和上面加起来,算出来一个加一个
38397
---------
4722831
'''
# 短的放下面,一样长不管
len1=num1.__len__()
len2=num2.__len__()
if len2>len1:
tmp=num1
num1=num2
num2=tmp
len1=num1.__len__()
len2=num2.__len__()
# 题目限制num1、num2只包含0-9,所以非空
if len2==1:
if num2[0]=='0': return num2
if num2[0]=='1': return num1
res=[]
for idx,x in enumerate(num2[::-1]):
jinwei=0
sum=[]
for y in num1[::-1]:
v=int(x)*int(y)+jinwei
jinwei=v//10
v=v%10
sum.insert(0,v)
sum.insert(0,jinwei)
# 补零
for z in range(0,idx):
sum.append(0)
# print(sum)
if res.__len__()==0:
res=sum
else:
# 补零
res.insert(0,0)
jinwei=0
res_len=res.__len__()
for i in range(res_len-1,-1,-1):
v=res[i]+sum[i]+jinwei
res[i]=v%10
jinwei=v//10
if jinwei: res.insert(0,jinwei)
# print(res)
res_str=''
# 去掉头部的零
if res[0]==0:res=res[1:]
for x in res:
res_str+=str(x)
return res_str
if __name__ == '__main__':
print(multiply('123','38397'))
print(multiply('2','3'))
print(multiply('123','456'))