题目链接:Can you solve this equation?
题目大意:多项式求根,精确到10-4,数据范围是0到100
思路:很明显该多项式在0到100是递增的,故可以用零点逼近法,先求出多项式的最大值和最小值,然后在这个区间二分搜索,直到满足精度为止
AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double f(double x,int y)
{
return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6-y;
}
int main()
{
int t,y;
cin>>t;
while(t--)
{
cin>>y;
double low=0;
double high=100;
if(f(low,y)>0 || f(high,y)<0)
printf("No solution!\n");
else{
double mid;
while(high-low>=1e-6){//由于要精确到小数点后四位,所以第五位的值也应该是准确的,
mid=low+(high-low)/2;//故要估算到小数点后六位
if(f(mid,y)>0) high=mid;
else if(f(mid,y)<0) low=mid;
else break;
}
printf("%0.4f\n",mid);
}
}
return 0;
}