n!=1*2*3*4*5*6*...*n,n不超过1000
样例
输入:30
输出:265252859812191058636308480000000
分析:
1000的阶乘 大概可以用3000位表示,那么我们可以联想到使用数组记录各个位数,sz[0]保存个位数字
以此类推保存
#include<stdio.h>
#include<string.h>
#define maxn 3000//数组最大程度 也即int整数最多位数
int sz[maxn]={0};
int main()
{
int i,j,sum,ys,n;
scanf("%d",&n);
sz[0]=1;
for(i=2;i<=n;i++)//进行阶乘运算 每次都是对3000位进行更新
{
ys=0;
for(j=0;j<maxn;j++)
{
sum=sz[j]*i+ys;//每次循环都是针对的再乘以 一个数 循环完毕 即一次乘法结束
sz[j]=sum%10;//只存余数
ys=sum/10;
//存储每次的s
}
}
for(j=maxn-1;j>=0;j--)
if(sz[j])
break;//找到数字开头去除 数组开头的0
for(i=j;i>=0;i--)
printf("%d",sz[i]);
printf("\n");
return 0;
}
结果如下