多项式求值
题目要求:
本题要求实现一个函数,计算阶数为n,系数为a[0] … a[n]的多项式 f ( x ) = ∑ i = 0 n a [ x ] × x i \displaystyle f(x) = \sum_{i=0}^{n}a[x] \times x^{i} f(x)=i=0∑na[x]×xi在x点的值(阶数n,系数a[0]…a[n],定点x的值均为用户输入)。
算法1:
【直接计算】
计算量大,效率低
double CountMultinomial1(int n, double a[], double x) //系数存放在a[]数组中,n+1个系数
{
int i;
double mul = a[0];
for(i = 1; i <= n; i ++)
mul += a[i]*pow(x, i);
return mul;
}
算法2:
【化简多项式】
化简后进行计算,即将多项式的x作为公因子逐层提出,从内向外计算
double CountMultinomial2( int n, double a[], double x)
{
int i;
double mul = a[n];
for( i = n; i > 0; i-- )
mul = a[i-1] + x*mul;
return mul;
}
完整代码:
//【题目要求】写程序计算给定多项式在给定点x处的值
//【基本说明】x指数从0到n,系数为给定(用户输入)
// 两种算法
#include <stdio.h>
#include <math.h>
#define MAXSIZE 100
double CountMultinomial1(int n, double a[], double x);
double CountMultinomial2(int n, double a[], double x);
int main()
{
double a[MAXSIZE];
double x;
int i, n;
scanf("%d", &n);
for(i = 0; i <= n; i ++)
scanf("%lf",&a[i]);
scanf("%lf", &x);
printf("%lf", CountMultinomial2(n, a, x));
}
//【算法1】直接计算 (计算量大,效率低)
/*【算法思想】*/
/*直接累加计算*/
double CountMultinomial1(int n, double a[], double x) //系数存放在a[]数组中,n+1个系数
{
int i;
double mul = a[0];
for(i = 1; i <= n; i ++)
mul += a[i]*pow(x, i);
return mul;
}
//【算法2】化简多项式,然后计算
/*【算法思想】*/
/*化简多项式,即将多项式的x作为公因子逐层提出,从内向外计算*/
double CountMultinomial2(int n, double a[], double x)
{
int i;
double mul = a[n];
for(i = n; i > 0; i --)
mul = a[i - 1] + x * mul;
return mul;
}