题目描述:
输入n, 计算S= 1! + 2! + 3! + …+ n! 的末6位( 不含前导0 )n≤10^6, n!表示前n个正整数之积。
样例输入:
10
样例输出:
37913
知识点分析
1.余数的乘法和加法定理
例如:
(a * b)%c=((a%c) * b)%c
(a + b)%c=((a%c) + b)%c
等诸多变种
2.c程序在windows命令行编译运行时 可采用 echo 20 |factorial 输入数据
3.clock函数
(double)clock()/CLOCKS_PER_SEC)
//返回程序到目前为止的运行时间,包含程序员输入数据的时间
- 代码如下:
#include<stdio.h>
#include<time.h>
int main()
{
const int MOD =1000000;
int n,s=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int factorial=1;
for(int j=1;j<=i;j++)
{
factorial=(factorial *j %MOD);
}
s=(s+factorial)%MOD;
}
//要计算只包含加法、减法、乘法整数表达式除以正整数n的余数时,可以在每步计算时对n取余,结果保持不变
printf("%d",s);
printf("Time used=%.2f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}