输入说明
行1:5个空格分隔的整数a,b,c,d,e,a,b,c,d,e∈[-9,9]
行2:2个空格分隔的整数x1,x2,x1,x2∈[-10,10],x1<x2
输出说明
行1:一个浮点数,代表根,精确到小数点后10位
输入样例复制
0 2 -4 3 -6
-10 10
输出样例复制
2.0000000000
#include<iostream>
using namespace std;
int a,b,c,d,e;//定义全局变量,便于math函数调用
double math(double x)//计算f(x)的值
{
return a*x*x*x*x+b*x*x*x+c*x*x+d*x+e;
}
int main(){
do scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
while(a<-9||a>9||b<-9||b>9||c<-9||c>9||d<-9||d>9||e<-9||e>9);
int x1,x2;
do scanf("%d%d",&x1,&x2);
while(x1<-10||x1>10||x2<-10||x2>10);
double l=x1,r=x2;//将x1赋给l(left),将x2赋给r(right)用区间[l,r]表示
while(r-l>1e-12)//精度限定,防止误差
{
double mid=(l+r)/2;//求中值
if(math(mid)>=0)//判断中的对应的函数值是否大于0
{
if(math(l)<=0) r=mid;//当mid的函数值大于0,l的函数值小于等于0时区间右边界变为mid
else l=mid;
}
else
{
if(math(l)<=0) l=mid;
else r=mid;
}
}
if(math(l)==0)
printf("%.10lf\n",l);
else
printf("%.10lf\n",l);
return 0;
}