描述
给出两个用字符串表示的数字,将两个数字的乘积作为字符串返回。
备注:数字可以无限大,且是非负数。
示例1
输入:
"1","2"
返回值:
"2"
class Solution {
public:
string mul(string num1,int m){//计算一个字符串和一个个位数的乘积
int n=num1.size();
int t=0;
for(int i=n-1;i>=0;i--){
int val=(num1[i]-'0')*m+t;
t=val/10;
num1[i]='0'+val%10;
}
if(t>0)
num1.insert(num1.begin(),'0'+t);
return num1;
}
string add(string num1,string num2){//计算两个字符串的和
if(num1.size()<num2.size()){
string tmp=num1;
num1=num2;
num2=tmp;
}
num2.insert(num2.begin(),num1.size()-num2.size(),'0');
int t=0;
for(int i=num1.size()-1;i>=0;i--){
int val=num1[i]-'0'+num2[i]-'0'+t;
t=val/10;
num1[i]=val%10+'0';
}
if(t>0)
num1.insert(num1.begin(),t+'0');
return num1;
}
string multiply(string num1, string num2) {
if(num1.size()<num2.size()){
string tmp=num1;
num1=num2;
num2=tmp;
}
string res;
for(int i=0;i<num2.size();i++){//类似于sum=sum*10*x
res.insert(res.begin()+res.size(),'0');
res=add(res,mul(num1,num2[i]-'0'));
}
int i=0;
while(i<res.size()&&res[i]=='0')//经过上面的计算后,有可能在字符串的开始位置有0
i++;
if(i>=res.size())//如果结果全是为0
return "0";
else//否则从第一个非0位置开始算起
return res.substr(i);
}
};