【NOI】20 求一元二次方程的根

来源:互联网 发布:阿里巴巴推广软件 编辑:程序博客网 时间:2024/05/10 04:19

描述
利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。

输入
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。
输出
输出一行,表示方程的解。
若b2 = 4 * a * c,则两个实根相等,则输出形式为:x1=x2=…。
若b2 > 4 * a * c,则两个实根不等,则输出形式为:x1=…;x2 = …,其中x1>x2。
若b2 < 4 * a * c,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部 = -b / (2*a), 虚部 = sqrt(4*a*c-b*b) / (2*a)

所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。

-

其实就是套公式
去年能WA4次我也不太清楚自己怎么做到的;)

#include<cstdio>#include<cmath>using namespace std;double a,b,c;int main(){    scanf("%lf%lf%lf",&a,&b,&c);    if(b*b==4*a*c)    {        double x1;        x1=(0-b+sqrt(b*b-4*a*c))/(2*a);        printf("x1=x2=%.5lf",x1);        return 0;    }    if(b*b>4*a*c)    {        double x1,x2,s=sqrt(b*b-4*a*c);        x1=(0-b+s)/(2*a);        x2=(0-b-s)/(2*a);        printf("x1=%.5lf;x2=%.5lf",x1,x2);        return 0;    }    if(b*b<4*a*c)    {        double x1,x2,sb,xb;        sb=(0-b)/(2*a);        xb=sqrt(4*a*c-b*b)/(2*a);        printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi",sb,xb,sb,xb);        return 0;    }    return 0;}
0 0
原创粉丝点击