思路
我们只需要普通地模拟数字的乘法就可以了。可以现在草稿纸上自己模拟下。
例子
876 * 43 = 37668
图来自 高精度乘法
完整代码
#include <iostream>
#include <vector>
using namespace std;
vector<int> Mul(vector<int> v1, vector<int> v2){
vector<int> res(v1.size() + v2.size());//初始化
for (int i = 0; i < v1.size(); i++){
for (int j = 0; j < v2.size(); j++){
res[i + j] += v1[i] * v2[j];
}
}
int cur = 0;//进位
//进位操作
for (int i = 0; i < res.size(); i++) {
cur += res[i];
res[i] = cur % 10;
cur /= 10;
}
// 必须要去前导 0,因为最高位很可能是 0
while (res.size() > 1 && res.back() == 0) res.pop_back();
return res;
}
int main(){
string s1, s2;
cin >> s1 >> s2;
vector<int> v1, v2;
//翻转数字,所以要倒着读取
for(int i = s1.size() - 1; i >= 0; i--) v1.push_back(s1[i] - '0');
for(int i = s2.size() - 1; i >= 0; i--) v2.push_back(s2[i] - '0');
vector<int> res = Mul(v1, v2);
//由于一开始翻转了,所以结果也要倒着读
for(int i = res.size() - 1; i >= 0; i--) {
cout << res[i];
}
return 0;
}