PTA_6-2:本题要求实现一个函数,计算阶数为n
,系数为a[0]
... a[n]
的多项式f(x)=∑i=0n(a[i]×xi) 在x
点的值。
原题链接:https://pintia.cn/problem-sets/14/problems/734
超时答案
#include <stdio.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf("%lf", &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
/* 你的代码将被嵌在这里 */
double f( int n, double a[], double x )
{
double sum=0,y=1;
for(int i=0;i<=n;i++)
{
for(int j=0;j<i;j++)
{
if(j==0) y=1;
y *=x;
}
sum += a[i] * y;
}
return sum;
}
两个for循环的时间复杂度为O(n^2);当N很大时,测试用例超时。
改进答案
double f( int n, double a[], double x )
{
double sum=a[0],y=1;
for(int i=1; i<=n; i++)
{
y *=x;
sum += a[i] * y;
}
return sum;
}