版权声明:SupremeBeast3_ https://blog.csdn.net/weixin_43359312/article/details/89006731
7-18 二分法求多项式单根 (20 分)
输入格式:
输入在第1行中顺序给出多项式的4个系数a3 a2 a1 a0,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。
输出格式:
在一行中输出该多项式在该区间内的根,精确到小数点后2位。
输入样例:
3 -1 -3 1
-0.5 0.5
输出样例:
0.33
AC代码
#include <iostream>
#include <cstdio>
using namespace std;
double a3, a2, a1, a0;
double f(double x); //定义多项式
int main() {
cin >> a3 >> a2 >> a1 >> a0;
double a, b;
cin >> a >> b;
if (f(a)*f(b) > 0) { printf("%.2lf\n", (a + b) / 2); return 0; } //无效区域
double Tmp;
while (true) {
if (!f(a)) { printf("%.2lf\n", a); return 0; }
if (!f(b)) { printf("%.2lf\n", b); return 0; } //端点为根
Tmp = (a + b) / 2;
if (b - Tmp < 0.001) break; //达到阈值结束循环
if (f(Tmp)*f(a) > 0) a = Tmp;
else if (f(Tmp)*f(b) > 0) b = Tmp;
else break;
}
printf("%.2lf\n", Tmp); //输出近似根
return 0;
}
double f(double x) {
return a3*x*x*x + a2*x*x + a1*x + a0;
}