Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
经典的大数相乘问题:
1,从给定字符串最后一位开始操作,要弄清楚整个乘法的过程以及各进位的关系
2,每次新数位与被乘数相乘要把之前 的结果也要加上去(特别要注意进位的关系)
3,进完位后要把进位值归0
class Solution {
public:
string multiply(string num1, string num2) {
int len1=num1.length();
int len2=num2.length();
string ans(len1+len2,'0');
for(int i=len1-1,d=ans.length()-1;i>=0;i--,d--){
int carry=0;int k=d; //新数位乘以被乘数时,将进位值归0,
for(int j=len2-1;j>=0;j--,k--){
int a=num1[i]-'0';
int b=num2[j]-'0';
a=a*b+carry+(ans[k]-'0');//每次相乘加上进位值和原数位的值
carry=a/10;
ans[k]=a%10+'0'; //该数位值为乘完之后取模的值
}
while(carry){//表示j=0时还有进位值,
int sum=carry+(ans[k]-'0');
carry=sum/10;
ans[k--]=sum%10+'0';
}
}
while(ans.size()>1&&ans[0]=='0')ans.erase(ans.begin());//返回的字符串从首位开始遍历,是0的话则移除首位。
return ans;
}
};
参考这里