洛谷 [P1024]一元三次方程求解

来源:互联网 发布:淘宝华佗大药房怎么样 编辑:程序博客网 时间:2024/05/17 09:46

一道水题然而坑点很多。

#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>using namespace std;int read(){    int rv=0,fh=1;    char c=getchar();    while(c<'0'||c>'9'){        if(c=='-') fh=-1;        c=getchar();    }    while(c>='0'&&c<='9'){        rv=(rv<<1)+(rv<<3)+c-'0';        c=getchar();    }    return fh*rv;}double a,b,c,d;double f(double x){    return a*x*x*x+b*x*x+c*x+d;}int main(){    freopen("in.txt","r",stdin);    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);    for(int i=-100;i<=100;i++){        double x=f((double)i),y=f((double)(i+1));//一定要强制类型转换        if(x==0){            printf("%.2lf ",(double)i);        }else if(y==0){            printf("%.2lf ",(double)(i+1));            i++;        }else if(x*y<0){            double l=(double)i,r=(double)(i+1),m;            while(r-l>=0.0001){                m=(r+l)/2;                double t=f(m);                if(t==0){                    printf("%.2lf ",m);                    break;                }                if(f(m)*f(l)<0){                    r=m;                }else l=m;            }            printf("%.2lf ",r);        }    }    fclose(stdin);    return 0;}

从本题中学到了什么:

1>整数与实数的转换,千万不要相信编译器的水平,最好强制手动转换。
2>实数的二分写法。

盛金公式

百度。。

原创粉丝点击