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.
class Solution {
public:
string multiply(string num1, string num2) {
string n1,n2;
for (int i=num1.size()-1;i>=0;i--)//reverse(num1.begin(),num2.end()) is better
n1.push_back(num1[i]);
for (int j=num2.size()-1;j>=0;j--)
n2.push_back(num2[j]);
string tmp(num1.size()+num2.size(),'0');
for (int i=0;i<n2.size();i++)
{
int carry=0;
int a = n2[i]-'0';
for (int j=0;j<n1.size();j++)
{
int b = n1[j]-'0';
int product = a*b+carry+tmp[i+j]-'0';
int sum = product%10;
carry = product/10;
tmp[i+j]=sum+'0';
}
if (carry>0)
tmp[i+n1.size()]=carry+'0';
}
string res;
int i=tmp.size()-1;
while(tmp[i]=='0' && i>=0)
i--;
if (i<0)
return "0";
while(i>=0)
res.push_back(tmp[i--]);
return res;
}
};
No comments:
Post a Comment