原题链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2199
题目大意:
8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y
给你Y,求x。精确到小数点后四位。
二分法
详见代码:
#include<iostream> #include<cmath> using namespace std; double F(double x) { return 8 * x*x*x*x + 7 * x*x*x + 2 * x*x + 3 * x ; } int main() { int T; cin >> T; while (T--) { double n; cin >> n; if (n<6 || n>807020306)// 当0<=x<=100时 , 6<=Y<=807020306 { cout << "No solution!" << endl; continue; } n -= 6;//减去那个常数6,少一丢丢运算量。(也可不省) double left=0, right=100; double mid = 50; while (abs(F(mid) - n)> 0.0001)//二分法 { if (F(mid) > n) { right = mid; mid = (left + right) / 2; } else { left = mid; mid = (left + right) / 2; } } printf("%.4lf\n", mid);//会自动四舍五入 } return 0; }