HDU1042 N!

此题就是求n!,很明显只能用数组来写,不过数组要开大些,此题的Time Limit: 10000/5000 MS (Java/Others) ,下面是我的AC代码,

勉强过:

#include<stdio.h>//根据人手算 而得到的算法
#include<string.h>
#define M 40000 //数组要开大些 也不能太大 否则不能通过
int main()
{
int a[M],i,j,t,k,l,n;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
a[0]=1; //数组的第一个值 变为1 因为从1开始乘
for(i=2;i<=n;i++)
{
k=0;
for(j=0;j<M;j++)
{
t=a[j]*i+k; //这个是算法的关键 即人脑算的过程
k=t/10;
a[j]=t%10;
}
}
for(i=M-1;;i--)
{
if(a[i]!=0)
{
l=i;
break; //别忘了 break
}
}
for(i=l;i>=0;i--) //要反过来输出 因为是反着输入的
printf("%d",a[i]);
putchar('\n');

}
return 0;
}



谁有更为简单的算法,请告诉我们,和大家共享哦!

原文地址:https://www.cnblogs.com/hsqdboke/p/2387209.html