2.编写一个程序求1!+2!+3!+…+n!,其中,n为正整数。请给出直接累计i!(1≤i≤n)的算法和改进算法。并采用相关数据测试(在上机实验时n比较大时结果会溢出,不必考虑结果溢出情况)。分析两个算法的时间复杂度。
#include <stdio.h>
#include <time.h>
#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;
}