这里要用一个循环完成二分搜索
为了保证精确度,循环次数远大于log2(1000000).
这里的解实际上不是整的0.0001(单位)
例如20180421,输出的是9.9993,实际是9.9993431009
所以不可以用1百万层循环来每次加0.0001(错误方法)
必须用二分法
代码:
#include<cstdio>
int main()
{
int n,x;
scanf("%d",&n);
while(n--){
double r=100,l=0,m,y;
scanf("%lf",&y);
for(int i=0;i<30;i++)///用循环来代替递归,循环次数要远大于log2(1000000);
{
m=(r+l)/2;
if(2018*m*m*m*m+21*m+5*m*m*m+5*m*m+14<y)
l=m;
else r=m;
}
if(l==0||r==100)
printf("-1\n");
else printf("%.4f\n",m);
}
return 0;
}