题目
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.
Note:
The length of both num1 and num2 is < 110.
Both num1 and num2 contains only digits 0-9.
Both num1 and num2 does not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
解析
思路:按照乘法运算法则利用vector从右向左计算
代码
class Solution {
public:
string multiply(string num1, string num2) {
unsigned int l1=num1.size(),l2=num2.size();
if (l1==0||l2==0) return "0";
vector<int> v(l1+l2,0);
for(unsigned int i=0;i<l1;i++){
int n1=(int)(num1[l1-i-1]-'0');
int carry=0;
for(unsigned int j=0;j<l2;j++){
int n2=(int)(num2[l2-j-1]-'0');
int sum=n1*n2+v[i+j]+carry;
carry=sum/10;
v[i+j]=sum%10;
}
if(carry>0)
v[l2+i]=carry;
}
int start=l1+l2-1;
while(v[start]==0&&start>=0) start--;
if(start==-1) return "0";
string s="";
for(int i=start;i>=0;i--)
s+=(char)(v[i]+'0');
return s;
}
};