class Solution {
public:
string multiply(string num1, string num2) {
if (num1[0] == '0' || num2[0] == '0') {
return "0";
}
vector<string>vec;
string result = "0";
for (int i = num1.size() - 1; i >= 0; i--) {
int jbit = 0; // j进位
int bbit = 0;
string res(num1.size() - 1 - i, '0');
for (int j = num2.size() - 1; j >= 0; j--) {
int n1 = num1[i] - '0';
int n2 = num2[j] - '0';
bbit = (n1 * n2 + jbit) % 10; // 本位
jbit = (n1 * n2 + jbit) / 10; //进位
res.insert(0, to_string(bbit));
}
if (jbit != 0) {
res.insert(0, to_string(jbit));
}
result = add(res, result);
// vec.push_back(res);
}
return result;
// int len = vec.size();
// while (len > 1) {
// for (int i = 0; i < len / 2; i++) {
// vec[i] = add(vec[i], vec[len - 1 - i]);
// }
// len = (len + 1) / 2;
// }
// return vec[0];
}
string add(string str1, string str2) {
// 保证str1的字符串最长
if (str1.size() < str2.size()) {
swap(str1, str2);
}
int bit = 0;
int bbit = 0;
int j = str1.size() - 1;
for (int i = str2.size() - 1; i >= 0; i--) {
int n1 = str1[j] - '0';
int n2 = str2[i] - '0';
int num = n1 + n2 + bit;
bbit = num % 10;
bit = num / 10; //进位
str1[j--] = bbit + '0';
}
while (bit != 0 && j >= 0) {
int n = str1[j] - '0' + bit;
bbit = n % 10;
bit = n / 10;
str1[j--] = bbit + '0';
}
if (bit != 0) {
str1.insert(0, to_string(bit));
}
return str1;
}
};
43-字符串相乘
最新推荐文章于 2020-08-26 18:35:39 发布