您的位置:首页 > 其它

LeetCode: Multiply Strings

2015-01-16 13:23 537 查看
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) {
int size1 = num1.size(), size2 = num2.size();
if((size1 == 1 && num1[0] == '0') || (size2 == 1 && num2[0] == '0'))
return "0";
vector<int> digit1, digit2;
vector<int> temp(size1+size2, 0);
vector<vector<int> > results(size2, temp);
string sumString = "";
for(int i = 0; i < size1; i++)
{
digit1.insert(digit1.begin(), num1[i] - 48);
}
for(int i = 0; i < size2; i++)
{
digit2.insert(digit2.begin(), num2[i] - 48);
}
for(int i = 0; i < size2; i++)
{
int carry = 0;
for(int j = 0; j < size1; j++)
{
results[i][i+j] = (digit1[j] * digit2[i] + carry) % 10;
carry = (digit1[j] * digit2[i] + carry) / 10;
}
results[i][i+size1] = carry;
}
int carry = 0;
for(int i = 0; i < size1 + size2; i++)
{
int sum = 0;
for(int j = 0; j < size2; j++)
{
sum += results[j][i];
}
temp[i] = (sum + carry) % 10;
carry = (sum + carry) / 10;
}
int start = temp[size1+size2-1] == 0 ? size1+size2-2 : size1+size2-1;
for(int i = start; i >= 0; i--)
{
sumString += (temp[i] + 48);
}
return sumString;

}

};

Round 2:

class Solution {
public:
string multiply(string num1, string num2) {
string base = "";
string pre = "";
string cur = "";
if(num1 == "0" || num2 == "0")
return "0";
for(int i = num1.size()-1; i >= 0; i--)
{
int carry = 0;
cur = base;
for(int j = num2.size()-1; j >=0; j--)
{
cur += ((((num1[i] - '0') * (num2[j] - '0') + carry) % 10) + '0');
carry = ((num1[i] - '0') * (num2[j] - '0') + carry) / 10;
}
if(carry)
cur += (carry + '0');
carry = 0;
for(int x = 0; x < cur.size(); x++)
{
if(pre == "")
break;
if(x < pre.size())
{
int temp = carry;
carry = (cur[x] - '0' + pre[x] - '0'+ carry)/10;
cur[x] = ((cur[x] - '0' + pre[x] - '0' + temp)%10) + '0';
}
else
{
int temp = carry;
carry = (cur[x]-'0' + carry)/10;
cur[x] = ((cur[x]-'0' + temp)%10) + '0';
}
}
if(carry)
cur += (carry + '0');
pre = cur;
base += "0";
}
int l = 0, r = cur.size()-1;
while(l < r)
{
char temp = cur[l];
cur[l] = cur[r];
cur[r] = temp;
l++;
r--;
}
return cur;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: