LeetCode 45. 字符串相乘
/*
给定两个以字符串形式表示的非负整数 num1 和 num2,
返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式
思路:
1. 乘数 num1 位数为 M,被乘数 num2 位数为 N, num1 x num2 结果 res 最大总位数为 M+N
2. num1[i] x num2[j] 的结果为 tmp(位数为两位,"0x","xy"的形式),
其第一位位于 res[i+j],第二位位于 res[i+j+1]
*/
string multiply(string num1, string num2) {
if (num1.empty() || num2.empty() || num1.at(0) == '0' || num2.at(0) == '0') {
return num1.empty() ? num2 :
(num1.at(0) == '0' || num2.at(0) == '0') ? string("0") : num1;
}
vector<int> result(num1.length() + num2.length(), 0);
for (int i1 = num1.length() - 1; i1 >= 0; i1--) {
int n1 = num1.at(i1) - '0';
for (int i2 = num2.length() - 1; i2 >= 0; i2--) {
int n2 = num2.at(i2) - '0';
int sum = result.at(i1 + i2 + 1) + n1 * n2;
result.at(i1 + i2 + 1) = sum % 10;
result.at(i1 + i2) += sum / 10;
}
}
string res;
for (int i = 0; i < result.size(); i++) {
if (i == 0 && result.at(i) == 0) {
continue;
}
res.append(to_string(result.at(i)));
}
return res;
}
如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢