2.编写一个程序求1!+2!+3!+…+n!,其中,n为正整数。请给出直接累计i!(1≤i≤n)的算法和改进算法。并采用相关数据测试(在上机实验时n比较大时结果会溢出,不必考虑结果溢出情况)。分析两个算法的时间复杂度。
#include#include #define MAX 999 long Product1(long n) { long pt=0,p1; for (long i=1; i<=n; i++) { pt1=1; for (long j=1; j<=i; j++) pt1*=j; pt+=pt1; } return pt; } long Product2(long n) { long pt=0,pt1=1; for (long i=1; i<=n; i++) { pt1*=i; pt+=pt1; } return pt; } void display(long n) { long pt; clock_t t; printf("算法1: "); t=clock(); pt=Product1(n); t=clock()-t; printf("结果=%ld ",pt); printf ("时间=%lf秒n",((float)t)/CLOCKS_PER_SEC); printf("算法2: "); t=clock(); pt=Product2(n); t=clock()-t; printf("结果=%ld ",pt); printf ("时间=%lf秒n",((float)t)/CLOCKS_PER_SEC); } int main() { display(100000); return 0; }



