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.
这题不难,就是觉得麻烦。下面是按照人类自己笔算乘法的方式写的。
class Solution {
public:
string multiply(string num1, string num2) {
if(num1 == "0" || num2 == "0") return "0";
int length1 = (int)num1.length();
int length2 = (int)num2.length();
string result(length1 + length2, '0');// 两个数相乘最终结果只能小于或者等于两个数长度之和。
for(int ii = length2 - 1; ii >= 0; ii --) { // num1 * num2[ii]
int num2ii = num2[ii]- '0';
for(int jj = length1 - 1; jj >= 0; jj --) {
int num1jj = num1[jj] - '0';
int res = num2ii * num1jj + result[ii + jj + 1] - '0'; //num2[ii] * num1[jj] + 原有的数值
int jinwei = res / 10;
int gewei = res % 10;
result[ii + jj + 1] = gewei + '0';
int iijj = ii + jj;
while(jinwei != 0) { // 处理进位,可能会有多次进位。
res = result[iijj] - '0' + jinwei;
jinwei = res / 10;
gewei = res % 10;
result[iijj] = gewei + '0';
iijj --;
}
}
}
if(result[0] == '0') {
result = result.substr(1, result.length() -1);
}
return result;
}
};