二分法求方程的根。
注意函数在0-100单调递增因此最开始想的有点多。
#include <iostream>
#include<stdio.h>
using namespace std;
typedef double LD;
const LD AC=1e-6; //保留4位要多一些
LD f(LD x)
{
return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;
}
LD bs(LD y)
{
LD lo=0,hi=100.0;
LD mid;
while(hi-lo>AC) //查找的跳出条件变化了
{
mid=lo+(hi-lo)/2.0;
if(f(mid)>y)
hi=mid;
else
lo=mid;
}
return hi;
}
int main()
{
int t;
LD y;
LD fmax=f(100.0),fmin=f(0);
scanf("%d",&t);
while(t--)
{
scanf("%lf",&y);
if(y<fmin||y>fmax)
{
printf("No solution!\n");
}
else
printf("%.4lf\n",bs(y));
}
return 0;
}