/*
阶乘之和:
输入n,计算s=1!+2!+3!+···+n!的末六位,n<=10^6
分析:
for(int i=1;i<n;i++)s+=i!
*/
#include<stdio.h>
int main(){
int i,j,n,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
int factorial=1;//累乘器
//计算i的阶乘
for(j=1;j<=i;j++)
factorial*=j;
s+=factorial;
}
printf("%d\n",s%1000000);
return 0;
}
注意:
1、累乘器的使用。
2、当n=100时,会出现乘法溢出。
3、当n非常大时,程序的运行时间会非常慢。
/*
阶乘之和:
输入n,计算s=1!+2!+3!+···+n!的末六位,n<=10^6
分析:
for(int i=1;i<n;i++)s+=i!
计时函数的使用
*/
#include<stdio.h>
#include<time.h>
int main(){
const int MOD=100000;//定义一个常量
int i,j,n,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
int factorial=1;//累乘器
//计算i的阶乘
for(j=1;j<=i;j++)
factorial=(factorial*j)%MOD;
s=(s+factorial)%MOD;
}
printf("%d\n",s%1000000);
printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC);//使用计时函数,输出程序的运行时间。
return 0;
}