时间限制:3000 ms | 内存限制:65535 KB
难度:3
-
描述
-
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
-
输入
- 输入一个整数m(0<m<=5000) 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入
-
50
样例输出
-
30414093201713378043612608166064768844377641568960512000000000000
<pre name="code" class="html"><span style="font-size:18px;">思路:如果用普通的方法,此题肯定超时,我们不妨将得到的结果放在一个一维数组中,阶乘,我们一步一步的从2一直乘到N,把每一次求到的结果放在数组中,这样就不会出现内存泄漏和超时的问题了
#include<stdio.h>
#include<string.h>
#define Max 100001
int a[Max];
int main(void)
{
int i,j,lon;
int temp,w,n;
scanf("%d",&n);
memset(a,0,sizeof(a));
a[1]=1;
lon=1;
for(i=2;i<=n;i++)
{
w=0;
for(j=1;j<=lon;j++)
{
temp=a[j]*i+w;
a[j]=temp%10;
w=temp/10;
if(j>=lon&&w!=0)
{
lon++;
}
}
}
for(j=lon;j>=1;j--)
{
printf("%d",a[j]);
}
printf("\n");
return 0;
}
</span>