#include <iostream>
#include <vector>
using namespace std;
vector<int> mul(vector<int>&A,int b)
{
vector <int>C;int t;
for(int i = 0;i < A.size() || t;i ++)
{
if(i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
return C;
}
int main()
{
string a;int b;
cin >> a >> b;
vector<int>A;
for(int i = a.size() - 1;i >= 0;i --) A.push_back(a[i] - '0');
auto C = mul(A,b);
for(int i = C.size() - 1;i >= 0;i --) cout << C[i];
return 0;
}
该模板为高精度乘低精度,不适用高精乘高精。
以下模板可用于高精度乘高精度,但会超时
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string a,b;
cin >> a >> b;
vector<int>A,B,C;
A.push_back(0);B.push_back(0);
for(int i = a.size() - 1;i >= 0;i --) A.push_back(a[i] - '0');
for(int i = b.size() - 1;i >= 0;i --) B.push_back(b[i] - '0');
for(int i = 0;i < 4005;i++) C.push_back(0);
for(int i = 1;i < A.size();i ++)
for(int j = 1;j < B.size();j ++)
C[i + j - 1] += A[i] * B[j];
for(int i = 1;i <= C.size();i ++)
if(C[i] > 9)
{
C[i + 1] += C[i] / 10;
C[i] %= 10;
}
while(C.size() > 2 && C.back() == 0) C.pop_back();
for(int i = C.size() - 1;i > 0;i --) cout << C[i];
return 0;
}