文章目录
- 1.字符串相乘
1.字符串相乘
题目链接
- 解题思路:
高精度乘法,注意要学会下面这种列式相乘的形式🍎
注意细节❗: ①
🍎 首先把列式相乘的数据都存放到数组中去,
然后再对数组中的数据进行取余进位操作。
②🐟 要注意处理前导 0 的情况。
③🐟 注意当只有一位数字 0 的时候。
- 实现代码:
class Solution {
public:
string multiply(string num1, string num2) {
if (num1.size() == 1 && num1[0] == '0') return "0";
if (num2.size() == 1 && num2[0] == '0') return "0";
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int n = num1.size(), m = num2.size();
// 把每个位数先乘出来然后存放到这个数组中
vector<int> num(n + m);
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
num[i + j] += (num1[j] - '0') * (num2[i] - '0');
}
// 处理进位
string res = "";
int t = 0; // t 表示进位
for (auto& x : num)
{
res += ((x + t) % 10 + '0');
t = (x + t) / 10;
}
// 最后一个进位还没有处理
while (t > 0)
{
res += t % 10 + '0';
t /= 10;
}
// 去掉前导 0
while (res.back() == '0')
res.pop_back();
reverse(res.begin(), res.end());
return res;
}
};