问题 C: 22-循环-2-算算n!
题目描述
Alice:Bob你在干什么?
Bob:我在计算n的阶乘求余2009后的结果,即s=n!%2009
Alice:n有多大啊?
Bob:0≤n≤1000000000
Alice:你疯了吧
Bob:放心,我会应用求余运算的性质的,即(axb)%c等价于((a%c)x(b%c))%c,而且n最多也才109
输入
多组样例,输入一个整数n(0 ≤n≤109)
输出
输出一个数,表示输入数的阶乘求余2009后的结果。
样例输入 Copy
4
样例输出 Copy
24
提示
0! = 1, n! =n*(n-1)!
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int n;
while(scanf("%d",&n)!=EOF)
{
//2009=41*49
//因此在达到41!的时候,结果就是0了。
if(n>=41)
printf("0\n");
else
{
int x=1; //阶乘记得从1开始,别初始化为0
for(int i=2;i<=n;i++)
{
x*=i;
x%=2009;
}
printf("%d\n",x);
}
}
return 0;
}
1、2009=7*7*41 n!%2009 n>=41时,余数为0。