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:
void reverse(string &str)
{
if (str.size() == 0)
return;
int beginIdx = 0;
int endIdx = str.size()-1;
while (beginIdx<endIdx)
{
int tmp = str.at(beginIdx);
str[beginIdx] = str[endIdx];
str[endIdx] = tmp;
beginIdx++;
endIdx--;
}
}
string multiply(string num1, string num2) {
reverse(num1);
reverse(num2);
vector<int> result(num1.size()+num2.size());
int lastPos;
for (int i=0; i<num1.size(); i++)
{
for (int j=0; j<num2.size(); j++)
{
int tmp = (num1[i]-'0') * (num2[j]-'0');
result[i+j] += tmp;
}
}
int carry = 0;
string retValue="";
for (int i=0; i<result.size(); i++)
{
int tmp = result[i]+carry;
if (tmp >= 10)
{
result[i] = tmp%10;
carry = tmp/10;
}
else
{
result[i] = tmp;
carry = 0;
}
retValue = (char)(result[i]+'0') + retValue;
}
int i=0;
for (; i<retValue.size(); i++)
{
if (retValue[i] != '0')
{
retValue = retValue.substr(i, retValue.size()-i);
break;
}
}
if (i == retValue.size() && retValue[retValue.size()-1] == '0')
return "0";
else
return retValue;
}
};