hdu 2199 Can you solve this equation?(二分法)

时间:2022-12-23 22:11:46

原题链接:

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;
}