class Solution {
public:
string multiply(string num1, string num2) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
string num3 = "0";
for (int i = num2.size() - 1, j = 0; i >= 0; --i, ++j)
{
string mul = multiplyOne(num1, num2[i]);
add(num3, mul, j);
}
reverse(num3.begin(), num3.end());
return num3;
}
string multiplyOne(string &num, char ch)
{
if (ch == '0')
{
return "0";
}
int carry = 0;
string mul;
for (int i = num.size() - 1; i >= 0; --i)
{
int tmp = (num[i] - '0') * (ch - '0') + carry;
mul += (tmp % 10) + '0';
carry = tmp / 10;
}
if (carry > 0)
{
mul += carry + '0';
}
return mul;
}
void add(string &num1, string &num2, int index)
{
if (num2 == "0")
{
return;
}
int rest = index + num2.size() - num1.size();
for (int i = 0; i < rest; ++i)
{
num1 += '0';
}
int carry = 0;
for (int i = index, j = 0; j < num2.size(); ++i, ++j)
{
int sum = num1[i] - '0' + num2[j] - '0' + carry;
num1[i] = (sum % 10) + '0';
carry = sum / 10;
}
if (carry == 1)
{
for (int i = index + num2.size(); i < num1.size(); ++i)
{
int sum = num1[i] - '0' + carry;
num1[i] = (sum % 10) + '0';
carry = sum / 10;
}
if (carry == 1)
{
num1 += '1';
}
}
}
};
LeetCode-Multiply Strings
最新推荐文章于 2024-10-10 22:59:02 发布