解方程:f(x) : 8*pow(x, 4) + 7*pow(x, 3) + 2*pow(x, 2) + 3*x + 6 = Y。
二分精度查找,注意No solution的情况,f(0) < Y && f(100) > Y。
#include <stdio.h>
double pow(double x, int m) {
double sum = 1;
for(int i = 0; i < m; i++) {
sum *= x;
}
return sum;
}
double f(double x) {
return 8*pow(x, 4) + 7*pow(x, 3) + 2*pow(x, 2) + 3*x + 6;
}
int main() {
int N;
int Y;
scanf("%d", &N);
while(N--) {
scanf("%d", &Y);
if(f(0) > Y || f(100) < Y) {
puts("No solution!");
continue;
}
double l = 0, r = 100, m;
while(r-l > 1e-9) {
m = (r+l)/2;
if(f(m) > Y) r = m;
else l = m;
}
printf("%.4lf\n", m);
}
return 0;
}