阶乘之和
例题:
输入n,计算S = 1!+2!+3!+...+n!的未6位(不含前导0)。n<=10^6,n!表示前n个正整数之积。
样例输入:
10
样例输出:
37913
分析:
这个任务看似不难,实际却有陷阱。先看如下代码:
代码1(有缺陷):
//abc
#include<stdio.h> #include<stdlib.h> int main() { unsigned long int n,S = 0; scanf("%ld",&n); for(int i=1;i<=n;i++) { int long factorial = 1; for(int j=1;j <=i;j++) factorial *= j; S += factorial; } printf("%ld\n",S % 1000000); return 0; }
#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; } printf("%d\n",S); printf("Time used = %.2f\n",(double)clock() / CLOCKS_PER_SEC); retu