算法笔记练习 5.1 简单数学 问题 J: 多项式的值

算法笔记练习 题解合集

题目链接

题目

题目描述
实现一个多项式的类(a+bx+cx2+d*x3+…+),要求输入该多项式的系数和 x 的值后打印出这个多项式的值。

输入
输入第一行为样例数m,对于每个样例,第一行为多项式最高项次数n,接下来n+1个整数表示每项系数,最后一个整数x,n不超过10。

输出
输出 m 行,表示个多项式代入 x 后的值。

样例输入

1
2
1 2 3
2

样例输出

17

思路

秦九韶算法:
f ( x ) = a n x n + a n − 1 x n − 1 + ⋯ + a 1 x + a 0 = ( a n x n − 1 + a n − 1 x n − 2 + ⋯ + a 2 x + a 1 ) x + a 0 = ( ( a n x n − 2 + a n − 1 x n − 3 + ⋯ + a 3 x + a 2 ) x + a 1 ) x + a 0 \begin{aligned} f(x)&=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0 \\&=(a_nx^{n-1}+a_{n-1}x^{n-2}+\cdots+a_2x+a_1)x+a_0 \\&=((a_nx^{n-2}+a_{n-1}x^{n-3}+\cdots+a_3x+a_2)x+a_1)x+a_0 \end{aligned} f(x)=anxn+an1xn1++a1x+a0=(anxn1+an1xn2++a2x+a1)x+a0=((anxn2+an1xn3++a3x+a2)x+a1)x+a0
所以从编程的角度而言,应该从次数最高的地方开始算。
以下运算符为 C 语言中的意义,假设 f ( x ) f(x) f(x) 的系数不全为 0:

  1. a n s = a n ans=a_n ans=an
  2. n   ! = 0 n\,!=0 n!=0,则 a n s   ∗  ⁣ =   x ans\,*\!=\,x ans=x a n s   +  ⁣ =   a n − 1 ans\,+\!=\,a_{n-1} ans+=an1 n = n − 1 n=n-1 n=n1
  3. 重复 2 直到 n = = 0 n==0 n==0.

代码

#include <stdio.h>
int main() {
	int m, n, x, i;
	while (scanf("%d", &m) != EOF) {
		while (m--) {
			scanf("%d", &n);
			int coe[n + 1]; 
			for (i = 0; i < n+1; ++i)
				scanf("%d", &coe[i]);
			scanf("%d", &x);
			
			int ans = coe[n];
			for (i = n - 1; i >= 0; --i){
				ans *= x;
				ans += coe[i]; 
			} 
			printf("%d\n",ans); 
		} 
	} 
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值