杭电2199——Can you solve this equation?

题目大意
杭电2199——Can you solve this equation?
解题思路
本题主要采用二分法的思路解题
代码实现

1  #include<iostream>
2  #include<cmath>
3  using namespace std;
4  double  f(double x){
5   	return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;
6  }
7  int main(){
8  	 int t;
9  	 cin>>t;
10 	 while(t--){               //t次循环输入y值 	
11		double y,left=0,right=100.0;	
12		double middle=(left+right)/2;
13		cin>>y;
14		if(f(0)>y||f(100)<y)
15			cout<<"No solution!"<<endl;   //y的值不在f(0)与f(100)的值之间,故y对应的x的解不在【0,100】,方程无解   
16		else{
17			while(right-left>1e-7) { 
18				if(f(middle)==y)
19				   break;     //找到值之后终止循环 
20			    else if(y<f(middle))
21				   right=middle-1e-7;        //y对应的值在左半侧,移动right的值,更改查询范围 
22		     	else  if(y>f(middle))
23				   left=middle+1e-7;      
24				middle=(left+right)/2;     //y对应的值在右半侧,移动left的值,更改查询范围 
25			}
26			printf("%0.4f\n",middle); 
27		}
28	 }
29	 return 0;	
30 } 

遇到的bug
1数据类型为double型
2由于所求结果要保留四位小数,因此靠考虑好精度的问题

上一篇:算法分析与设计3-1写出两种检索算法:在一个排好序的数组T[1..n]中查找x


下一篇:【算法】二分查找