#include <stdio.h>
int main(){
int i,j,n;
int s=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
int factorial=1.0;
for(j=1;j<=i;j++){
factorial*=j;
}
s+=factorial;
}
printf("%d\n",s%1000000);
return 0;
}
1当n为100时输出的是一个负值说明乘法溢出了
2当n为10^6时速度很慢
3使用<time.h>和clock()函数可以在程序调用它之前获得整个程序的运行时间,这个时间除以常数CLOCKS_PER_SEC得到的值
#include <stdio.h>
#include <time.h>
int main(){
const int MOD=1000000;
int i,j,n;
int s=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
int factorial=1.0;
for(j=1;j<=i;j++){
factorial*=j;
}
s+=factorial;
printf("%d\n",s);
}
s=s%MOD;
printf("%d\n",s);
printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
注意:1上面的程序使用了常量定义,增加了程序的可读性,而且当题目该为求后5位的时候也方便修改
2输入20时候所用时间远远大于0是因为它把键盘输入的时间也计算在内(在程序启动之后所用的时间)
3为了避免时间影响测试结果我们使用一种称为管道的小技巧:在WINDOWS命令行下执行echo 20 | abs,操作系统会自动帮你把20输入,其中abs就是你的程序名
而Linux中则需要输入echo | /abs(具体abs旁边的不是/)(应为打不出来所以用了这个),因为在默认情况下当前目录不在可执行文件的搜索路线中
4很多程序的运行时间与规模n都存在着近似的简单关系。可以通过计是函数来发现或者验证这一规律