∑=i∗xi
#include <stdio.h>
#include <time.h>
#include <math.h>
#define MAXN 10
#define MAXK 1e7
clock_t start, stop;
double duration;
double f1(int n, double a[], double x);//直接的方法
double f2(int n, double a[], double x);//从里面到外面的方法
int main()
{
int i;
double a[MAXN], sum1, sum2;
for(i=0; i<MAXN; i++)
a[i] = (double)i;
start = clock();
for(i=0; i<MAXK; i++)
sum1=f1(MAXN-1, a, 1.1);
stop = clock();
duration = ((double)(stop-start))/CLK_TCK/MAXK;
printf("sum1 = %f\n", sum1);
printf("ticks1 = %f\n",(double)(stop-start));
printf("duration = %6.2e\n\n\n", duration);
start = clock();
for(i=0; i<MAXK; i++)
sum2=f2(MAXN-1, a, 1.1);
stop = clock();
duration = ((double)(stop-start))/CLK_TCK/MAXK;
printf("sum2 = %f\n", sum2);
printf("ticks2 = %f\n",(double)(stop-start));
printf("duration = %6.2e\n", duration);
return 0;
}
double f1(int n, double a[], double x)
//算法复杂度( 1+2+3...+n=(n^2+n)/2) 其实就是算乘法的次数,Tn=C1n^2+C2n
{
double sum=0;
int i;
for(i=0; i<=n; i++)
{
sum += (a[i]*pow(x,i));//这里+=后面加个大括号更保险
}
return sum;
}
double f2(int n, double a[], double x)
//算法复杂度n Tn=C*n
{
double sum=a[n];
int i;
for(i=n; i>0; i--)//注意这里是>0
{
sum = a[i-1] + sum*x;//这里也巧妙
}
return sum;
}
712

被折叠的 条评论
为什么被折叠?



