思路同小学竖式计算的过程,有两种处理方式。
class Solution {
public:
string multiply(string num1, string num2) {
if (num1=="" || num2=="")
return "";
if (num1=="0" || num2=="0")
return "0";
int len1=num1.size(),len2=num2.size();
string ans(len1+len2,'0');
for (int i=len2-1;i>=0;i--)
{
int carry1=0,carry2=0;
for(int j=len1-1;j>=0;j--)
{
int tmp1=(num1[j]-'0')*(num2[i]-'0')+carry1;
carry1=tmp1/10;
tmp1=tmp1%10;
int tmp2=ans[i+j+1]-'0'+tmp1+carry2;
carry2=tmp2/10;
ans[i+j+1]=tmp2%10+'0';
}
ans[i]+=carry1+carry2;
}
if(ans[0]=='0')
ans=ans.substr(1,len1+len2);
return ans;
}
};