杭电OJ2199Can you solve this equation?
题目描述:
思路:二分答案
AC代码:
#include <iostream>
#include <math.h>
using namespace std;
const double esp = 1e-8;
double f(double x)
{
return 8 * pow(x,4) + 7 * pow(x,3) + 2 * pow(x,2) + 3 * x + 6;
}
int main()
{
int T;
cin >> T;
while(T--)
{
int Y;
cin >> Y;
if(f(0) > Y || f(100) < Y)
{
cout << "No solution!" << endl;
}
else
{
double l = 0, r = 100;
while(r-l > esp)
{
double mid = l + (r-l) / 2;
if(f(mid) < Y)
{
l = mid ;
}
else r = mid ;
}
printf("%.4f\n",l);
}
}
return 0;
}
注意:esp开的要小一点,要求精确四位小数,一般是精确度+2,但开始设置1e-6时精确度却有偏差,设置1e-8就可以了;注意double。