用书中阶乘之和的例子举例。
注意:n比较大时,会出现乘法溢出。方法是改成“每步取模”。
数学原理:要计算只包含加法、减法、乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余,结果不变。
如何获得程序运行时间?
方法:可以使用time.h和clock()函数获得程序运行时间。常数CLOCKS_PER_SEC和操作系统相关,请不要直接使用clock()函数的返回值,而应总是除以CLOCKS_PER_SEC。
#include<stdio.h> #include<time.h> int main(void) { const int MOD=1000000; int n,S=0; scanf("%d",&n); if(n>25) n=25; //n大于25后,末六位数字就不受影响了。 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); return 0; }