题意:
求n的阶乘,并且对2009取余。
解题思路:
刚开始看,无从下手,但是当用大数把前60个都求出来的时候,就可以发现当n大于49,再对2009取余都是0;
所以就可以分三种种情况:
1、n>49;直接输出0;
2、0<n<=49时,求n的阶乘,再对2009取余;可以每次取余保存,避免溢出。
3、当n=0时,直接输出1;
程序:
#include<stdio.h>
int main()
{
int n,i,j,s;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
printf("1\n");;
continue;
}
else if(n<=49)
{
s=1;
for(i=1;i<=n;i++)
{
s=s*i%2009; // 每次取余保存,避免溢出
} printf("%d\n",s%2009);
}
else
printf("0\n");
}
return 0;
}