大意
求 的阶乘
思路
高精度模拟
代码
#include<cstdio>
#include<cstring>
#define N 1001
using namespace std;char c;int fact[101][N+1],n;
void Get_fact(int n)
{
fact[0][1]=1;fact[1][1]=1;
int m=0,l=0,x,a[N+1]={0};
for(int i=2;i<=n;i++)
{
x=i;m=0;
while(x) a[++m]=x%10,x/=10;//将a转换成数组,以便高精乘高精,这样子是方便处理更大的数据
for(l=N;!fact[i-1][l];l--);
for(int j=1;j<=l;j++)
{
int g=0;
for(int k=1;k<=m;k++)
{
fact[i][j+k-1]+=fact[i-1][j]*a[k]+g;
g=fact[i][j+k-1]/10;
fact[i][j+k-1]%=10;
}
fact[i][j+m]=g;//处理最终进位
}
}
return;
}
void print(int a[],int size)//输出一个数组
{
int j;
for(j=size;!a[j]&&j>1;j--);
for(int i=j;i>0;i--) putchar(a[i]+48);
return;
}
signed main()
{
scanf("%d",&n);
Get_fact(n);
print(fact[n],N-1);
}