- 分析
模拟平时我们手算乘法的步骤,对于因数的每一位先做乘法,然后在做加法,具体代码如下。
- 代码
class Solution {
public:
string add(string num1, string num2){//加法
string ans = "";
int i = num1.length() - 1;
int j = num2.length() - 1;
int jin = 0;
int sum = 0;
while(0 <= i && 0 <= j){
sum = jin + (num1[i] - 48) + (num2[j] - 48);
jin = sum / 10;
ans = (char)(sum % 10 + 48) + ans;
i--;
j--;
}
while(0 <= i){
sum = jin + (num1[i] - 48);
jin = sum / 10;
ans = (char)(sum % 10 + 48) + ans;
i--;
}
while(0 <= j){
sum = jin + (num2[j] - 48);
jin = sum / 10;
ans = (char)(sum % 10 + 48) + ans;
j--;
}
if(jin != 0){
ans = "1" + ans;
}
return ans;
}
string multemp(string num1, string num2){//乘法
int i = num1.length() - 1;
int number = num2[0] - 48;
string out = "";
int jin = 0;
int sum;
while(i >= 0){
sum = jin + (num1[i] - 48) * number;
jin = sum / 10;
out = (char)(sum % 10 + 48) + out;
i--;
}
if(jin != 0){
out = (char)(jin + 48) + out;
}
return out;
}
string multiply(string num1, string num2) {
int len1 = num1.length();
int len2 = num2.length();
string temp = "";
string ans = "";
string wei = "";
if(len2 > len1){
temp = num1;
num1 = num2;
num2 = temp;
swap(len2, len1);
}
for(int i = len2 - 1; i >= 0; i--){
temp = multemp(num1, num2.substr(i, 1));
temp += wei;
ans = add(temp , ans);
wei += "0";
}
if(atoi(ans.c_str()) == 0){
return "0";
}
return ans;
}
};