杭电2199
题目
AC代码
#include<iostream>//用二分法
#include<cmath>
#include<iomanip>
using namespace std;
double lans(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--)
{
double y;
cin>>y;
if(lans(0)<=y&&lans(100)>=y)
{
double first=0,end=100,mind;
while(end-first>0.0000001)
{
mind=(end+first)/2.0;
if(lans(mind)<y)
first=mind+0.0000001;
else
end=mind-0.0000001;
}
cout<<fixed<<setprecision(4)<<mind<<endl;
}
else
cout<<"No solution!"<<endl;
}
return 0;
}
解题思路
用二分法遍历
用精度控制结束
只要解在两数字中间,则一定有解,否则无解
出现问题
大范围判断嵌套出现问题
精度结束控制出现问题
总结
在空间充足的条件下,可以将统一成大范围的类型,目的是不容易出错
C++控制小数位数用 cout<<fixed<<setprecision(4)<<mind<<endl; 记得加上iomanip头文件
le-6表示10的-6次方