高精度 X 低精度:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> mul(vector<int> A, int b)
{
vector<int> C;
int t = 0;
for (int i = 0; i < A.size() || t; i ++ ) //只要t还没除到0就一直push,不用判断进位
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main()
{
string a;
int b;
vector<int> A, C;
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
C = mul(A, b);
for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];
return 0;
}
高精度 X 高精度:
#include <iostream>
#include <vector>
using namespace std;
vector<int> mul(vector<int> &A, vector<int> &B)
{
vector<int> C(A.size() + B.size(), 0);
for (int i = 0; i < A.size(); i ++ )
for (int j = 0; j < B.size(); j ++ )
C[i + j] += A[i] * B[j]; //竖式乘法的映射关系
int t = 0;
for (int i = 0; i < C.size(); i ++ )
{
t += C[i];
C[i] = t % 10;
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back(); //若结果为0,最少也要保留一个0
return C;
}
int main()
{
string a, b;
vector<int> A, B, C;
cin >> a >> b;
for (int i = a.size() - 1; ~i; i -- ) A.push_back(a[i] - '0');
for (int i = b.size() - 1; ~i; i -- ) B.push_back(b[i] - '0');
C = mul(A, B);
for (int i = C.size() - 1; ~i; i -- ) cout << C[i];
return 0;
}
更高精度 X 更高精度:需要用到快速傅里叶变换(FFT),已超出我当前认知范围😂
详情见 : 3123. 高精度乘法II