这个是简单版的,一个大整数和一个常数的乘法
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
vector<int> mul(vector<int> &A, int b)
{
int t = 0;
vector<int>C;
for(int i = 0; i < A.size() || t; i ++ ){
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;
cin>>a>>b;
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;
}
这个是稍复杂版的,两个大整数相乘的模板
原题链接:https://www.luogu.com.cn/problem/P1303
#include<iostream>
#include<string>
#define maxn 5010
using namespace std;
int a[maxn],b[maxn],c[maxn];
int main()
{
string A,B;
cin>>A>>B;
int lena=A.length(),lenb=B.length();
for(int i=lena-1; i >= 0; i--) a[lena-i]=A[i]-'0';
for(int i=lenb-1; i >= 0; i--) b[lenb-i]=B[i]-'0';
for(int i=1;i<=lena;i++){
for(int j=1;j<=lenb;j++){
c[i+j-1]+=a[i]*b[j];
}
}
for(int i=1; i <= lena+lenb; i++){
c[i+1] += c[i] / 10;
c[i] %= 10;
}
int len=lena+lenb;
while(c[len]==0 && len>1){
len--;
}
for(int i=max(1,len); i >= 1; i--){
cout<<c[i];
}
return 0;
}