PTA_6-2多项式求值问题笔记

最近才开始真正开始写代码,想把错题当博客写,以下是PTA基础算法的6-2函数题

本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式( 在x点的值。


//错误解题
double f(int n, double a[], double x)
{
	double sum = 0;
	double X = 1.0;
	for (int i = 0; i <= n; i++)
	{
		
		for (int j = 0; j <= i; j++)
		{
			if (i == 0) X = 1.0;
			else X = X*x;
		}
		sum = sum + a[i] * X;
	}
	return sum;
}

//正确解法

//第一版

#include
using namespace std;
#define Maxn 10

double f(int n, double a[], double x);
int main()
{
	int n;
	double a[Maxn], x;
	cin >> n >> x;

	for (int i = 0; i <= n; i++)
	{
		cin >> a[i];
	}
	cout << f(n, a, x);
	system("pause");
	return 0;
}
double f(int n, double a[], double x)
{
	double sum = 0;
	double X = 1.0;
	for (int i = 0; i <= n; i++)
	{

		for (int j = 0; j <= i; j++)
		{
			if(j==0) X = 1;
			else X = X*x;
		}
		sum = sum + a[i] * X;
	}
	return sum;
}

//for循环的套用使得时间复杂度为O(n^2),待改进

//改进后的第三版,有参考其他人的代码

//第二版

double f( int n, double a[], double x )    
{    
    int i;    
    double X=1;    
    double sum=a[0]; 
    for(i=1;i<=n;i++)//之前两个for循环套用完全可以用一个for循环来代替    
    {     
         X=X*x;    
         sum=sum+X*a[i];     
    }    
    return sum;    
}    


你可能感兴趣的:(PTA_6-2多项式求值问题笔记)