#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=101;
int a[maxn+100],b[maxn+100],n,bj;//高精度数组开大点,防止运算溢出
int main()
{
a[0]=b[0]=1;
scanf("%d",&n);
for(int i=2;i<=n;i++)
{
for(int j=0;j<=maxn;j++)
b[j]=i*b[j]; // 利用i来确定阶层和b[0]=0;b[1]=1!;b[2]=2!
for(int j=0;j<=maxn;j++)
{
if(b[j]>=10)//高精度求阶层
{
b[j+1]+=b[j]/10;
b[j]%=10;
}
}
for(int z=0;z<=maxn;z++)
{
a[z]+=b[z];//高精度求阶层和
if(a[z]>=10)
{
a[z+1]+=a[z]/10;
a[z]%=10;
}
}
}
for(int i=maxn-1;i>=0;i--)//去掉前导的零
if(a[i]!=0)
{
bj=i;
break;
}
for(int j=bj;j>=0;j--)
printf("%d",a[j]);
printf("\n");
return 0;
}
高精度阶乘之和
最新推荐文章于 2024-03-12 17:27:21 发布