杭电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由于所求结果要保留四位小数,因此靠考虑好精度的问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值