#include<stdio.h>//大数N!
#include<string.h>
using namespace std;
int main()
{
int n,a[100000],i,j,wei,up;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));//一定要清零
up=0;
wei=1;
a[1]=1;//当前结果的位数,便于相乘和最后输出
if(n==1||n==0)
{
printf("1\n");
continue;//如果为1!或0!则输出后直接进行下一个阶乘计算
}
for(i=2; i<=n; i++)//N!中的每个数
{
for(j=1,up=0; j<=wei; j++)
{
a[j]=a[j]*i+up; //当前j数加 进位
up=a[j]/10;//进位整除10
a[j]=a[j]%10;//当前数取余存储
}
while(up>0)//最后首位大于0则要取余进位
{
a[j++]+=up%10;//j++的值为进位取余 注意 j++导致后面的j加了一
up=up/10;
}
wei=j-1;//减去上面的j++
}
for(i=wei; i>=1; i--)
(i!=1)? printf("%d",a[i]) : printf("%d\n",a[i]);//三目 判断是否为最后一位 则输出换行
}
return 0;
}
大数N!
最新推荐文章于 2019-10-07 14:46:56 发布