由于方程式单调递增的,所以直接使用二分,找到误差不超过0.00005的解就可以了。
源代码:
#include<stdio.h>
double cal(double a){
double y = 8 * a*a*a*a + 7 * a*a*a + 2 * a*a + 3 * a + 6;
return y;
}
double decimal(double a){
double b=0;
return b;
}
int main(){
int t;
scanf("%d", &t);
while (t--){
double y;
scanf("%lf", &y);
if (y < 6 || y>807020306)printf("%s\n", "No solution!");
else {
double high=100, mid=50, low=0;
while ((high-low)>=0.000005){
if (cal(mid) > y){
high = mid;
mid = (high + low) / 2;
}
else {
low = mid;
mid = (high + low) / 2;
}
}
printf("%.4f\n", mid);
}
}
return 0;
}