解题思路
num2的每位都乘num1,从头到尾依次乘十再相加(字符串操作就是末位添0再字符串模拟加法)
代码
class Solution {
public:
string plus(string s1, string s2) {
int n1 = s1.size(), n2 = s2.size();
string ans = "";
int add = 0;
for(int i = 0; i < max(n1, n2); i++) {
int a = n1 - 1 - i >= 0 ? s1[n1 - 1 - i] - '0' : 0;
int b = n2 - 1 - i >= 0 ? s2[n2 - 1 - i] - '0' : 0;
ans += (a + b + add) % 10 + '0';
add = (a + b + add) / 10;
}
if(add) ans += add + '0';
reverse(ans.begin(), ans.end());
return ans;
}
string mu(string s, int x) {
int n = s.size();
string ans = "";
int add = 0;
for(int i = n - 1; i >= 0; i--) {
int a = s[i] - '0';
int b = a * x + add;
ans += b % 10 + '0';
add = b / 10;
}
if(add) ans += add + '0';
reverse(ans.begin(), ans.end());
return ans;
}
string multiply(string num1, string num2) {
int n = num2.size(); if(n == 1 && num2[0] == '0') return "0";
if(num1.size() == 1 && num1[0] == '0') return "0";
vector<string> unit(10);
unit[0] = "" ; unit[1] = num1;
for(int i = 2; i < 10; i++) unit[i] = mu(num1, i);
string ans = unit[num2[0] - '0'];
for(int i = 1; i < n; i++) {
ans += '0';
if(num2[i] == '0') continue;
else {
ans = plus(ans, unit[num2[i] - '0']);
}
}
return ans;
}
};