hdoj 2199二分查找

来源:互联网 发布:北京网络策划公司 编辑:程序博客网 时间:2024/06/11 11:09

给出方程:
8*x4 + 7*x3 + 2*x2 + 3*x + 6 = Y
其中,实数Y满足 (fabs(Y) <= 1e10)

请输出x在区间[0,100]的解,结果精确到小数点后4位。

看着 课件写的 ,慢慢理解 中

#include <iostream>#include <cstdio>#include <cmath>using namespace std;double y;double l,r,m;double f(double x){    return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;}int main(){    int t ;    scanf("%d",&t);    while(t--)    {        scanf("%lf",&y);        if(y>=f(0)&&y<=f(100))        {            l=0;            r=100;            while(r-l>1e-6)            {                m=(l+r)/2;                double ans=f(m);                if(ans>y)                    r=m-1e-7;                else                    l=m+1e-7;            }            printf("%.4lf\n",(l+r)/2);        }        else            printf("No solution\n");    }    return 0;}
1 0