高精度阶乘
C++ 代码
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int N=100010;
ll n;
//分解n
vector<int>dev(ll n)
{
vector<int> res;
while(n)
{
res.push_back(n%10);
n/=10;
}
return res;
}
//高精度乘法
vector<int> mul(vector<int> &a,int b)
{
vector<int> c;
int t=0;
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()
{
scanf("%lld",&n);
vector<int> num=dev(n);
vector<int> ans;
//for(int i=0;i<num.size();i++) printf("%d",num[i]);
for(int i=1;i<n;i++)
{
num=mul(num,i);
}
for(int i=num.size()-1;i>=0;i--) printf("%d",num[i]);
return 0;
}