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.
//#43 Multiply Strings
//12ms 56.32%
class Solution {
public:
string multiply(string num1, string num2)
{
string num3((num1.size() + num2.size()), '0');
//cout << "Initial num3 = " << num3 << endl;
for(unsigned int i=0; i<num1.size(); i++)
{
int m = num1.size() - i - 1;
int carry(0);
for(unsigned int j=0; j<num2.size(); j++)
{
int n = num2.size() - j - 1;
int k = num3.size() - i - j - 1;
int number = int(num1[m] - '0') * int (num2[n] - '0') + carry + int(num3[k] - '0');
//cout << "number == " << number << endl;
carry = number / 10;
int new_num3_int = number % 10;
num3[k] = char(new_num3_int + '0');
//cout << "num3[" << m << "+" << n << "]" << " == " << num3[k] << endl;
}
num3[num3.size() - i - num2.size() - 1] = char(carry + '0');
//cout << "carry == " << "[" << num3.size() - i - num2.size() - 1 << "]" << num3[num1.size() - i - num2.size() - 1] << endl;
}
//cout << "Result num3 == " << num3 << endl;
while(true)
{
//cout << "final check\n";
if(num3.empty())
{
break;
}
if(num3[0] != '0')
{
break;
}
//cout << "erase\n";
num3.erase(num3.begin());
}
if(num3.empty()) num3.push_back('0');
return num3;
}
};
本文详细阐述了如何使用字符串表示的任意大小的整数进行相乘,并通过C++代码实现了一个高效的乘法算法。
865

被折叠的 条评论
为什么被折叠?



