给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
res = 0
num1的最左边:num1[-len(num1)]
num1的最右边:num1[-1]
for i in range(1,len(num1)+1):
for j in range(1, len(num2)+1):
10^n是为了乘法结果左移;
-i,-j是为了倒过来计算;
每一步相加
res += int(num1[-i]) * int(num2[-j]) *10**(i+j-2)
return str(res)
def multiply(self, num1: str, num2: str) -> str:
multiply的计算:
num1: 12 ; num2: 456
912
912 456
5472
字符串相加:得到字符串;
def addStr(first,second,k):
if not first:return second;
first,second=first[-1::-1],second[-1::-1];
ans=first[:k];
n=len(second);
p=0;
for i in range(n):
if i+k<len(first):
ff=int(first[i+k]);
else:ff=0;
f=ff+int(second[i])+p;
ans+=str(f%10);
p=f//10;
if p:
ans+=str(p);
return ans[-1::-1];
if num1=='0' or num2=='0':return '0';
if num1=='1' or num2=='1' :return num1 if num1!='1' else num2;
n1,n2=len(num1),len(num2);
str1,str2=num1,num2;
if n1!=n2:
str1=num1 if n1<n2 else num2;
str2=num1 if n1>n2 else num2;
first,second='','';
isBegin=True;
n=0;
# print(str1,str2)
str1,str2=str1[-1::-1],str2[-1::-1];
for i in str1:
ans='';
ki=int(i);
p=0;
if isBegin:
first=''
for j in str2:
kj=int(j);
res=p+ki*kj
ans+=str(res%10);
p=res//10;
if p:
ans+=str(p)
second=ans[-1::-1];
# print(first,second)
first=addStr(first,second,n);
n+=1;
isBegin=False;
return first;