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.
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;
}
};
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;
}
};
相关文章推荐
- LeetCode 43: Multiply Strings
- LeetCode Multiply Strings
- LeetCode Multiply Strings
- [Leetcode]Multiply Strings
- LeetCode(43)Multiply Strings
- [LeetCode] Multiply Strings
- LeetCode 43 Multiply Strings
- [LeetCode]Multiply Strings
- #leetcode#Multiply Strings
- Multiply Strings leetcode
- LeetCode Multiply Strings(大整数相乘)
- LeetCode: Multiply Strings. Java
- [LeetCode]Multiply Strings
- Multiply Strings leetcode
- [LeetCode] Multiply Strings 字符串相乘
- LeetCode43_Multiply Strings
- leetcode 043 Multiply Strings
- [leetcode] Multiply Strings
- leetcode(43) - Multiply Strings
- LeetCode: Multiply Strings [042]