文章目录
- 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;}
};