题目:
Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and num2
, also represented as a string.
Example 1:
Input: num1 = "2", num2 = "3" Output: "6"
Example 2:
Input: num1 = "123", num2 = "456" Output: "56088"
Note:
- The length of both
num1
andnum2
is < 110. - Both
num1
andnum2
contain only digits0-9
. - Both
num1
andnum2
do not contain any leading zero, except the number 0 itself. - You must not use any built-in BigInteger library or convert the inputs to integerdirectly.
代码:
class Solution {
public:
string multiply(string num1, string num2) {
if (num1 < num2)
swap(num1, num2);
if (num2 == "0")
return "0";
string res = "";
vector<int> val(num1.length() + num2.length() + 1, 0);
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
for (int i = 0; i < num2.length(); i++)
{
if (num2[i] == '0')
continue;
vector<int> tmp_val(num1.length()+1, 0);
for (int j = 0; j < num1.length(); j++)
{
int cur2 = num2[i] - '0';
int cur1 = num1[j] - '0';
tmp_val[j] += (cur2 * cur1);
if (tmp_val[j] > 9)
{
tmp_val[j + 1] = tmp_val[j] / 10;
tmp_val[j] %= 10;
}
}
for (int j = 0; j < tmp_val.size(); j++)
{
val[i + j] += tmp_val[j];
if (val[i + j] > 9)
{
val[i + j + 1] += val[i + j] / 10;
val[i + j] %= 10;
}
}
}
int i = val.size() - 1;
for (; i >= 0 && val[i] == 0; i--);
for (; i >= 0; i--)
{
char cur_val = val[i] + '0';
res += cur_val;
}
return res;
}
};
题外话:
五月结束啦~梦幻快速又发生了很多的五月~
六一快乐!哈哈哈 新的一个月,加油啊!