题目描述
利用公式 :
�1=−�+�2−4��2�,�2=−�−�2−4��2�x1=2a−b+b2−4ac,x2=2a−b−b2−4ac
求一元二次方程 ��2+��+�=0ax2+bx+c=0 的根,其中 �a 不等于 00。结果要求精确到小数点后 55 位。
输入格式
输入一行,包含三个浮点数 �,�,�a,b,c(它们之间以一个空格分开),分别表示方程 ��2+��+�=0ax2+bx+c=0 的系数。
输出格式
输出一行,表示方程的解。
若两个实根相等,则输出形式为:x1=x2=aaaa
;
若两个实根不等,在满足根小者在前的原则,则输出形式为:x1=aaaa;x2=bbbb
;
若无实根输出 No answer!
。
所有输出部分要求精确到小数点后 55 位,数字、符号之间没有空格。
输入输出样例
输入 #1复制
-15.97 19.69 12.02
输出 #1复制
x1=-0.44781;x2=1.68075
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
double a,b,c;
cin>>a>>b>>c;
if(a==0)
{
cout<<"No answer!\n";
return 0;
}
if((b*b)-(4*a*c)<0)
{
cout<<"No answer!\n";
return 0;
}
double x1=(-b+sqrt(b*b-4*a*c))/(2.0*a);
double x2=(-b-sqrt(b*b-4*a*c))/(2.0*a);
if(x1==x2)
{
cout<<"x1=x2=";
cout<<fixed<<setprecision(5)<<x1<<endl;
}
else if(x1<x2)
{
cout<<"x1=";
cout<<fixed<<setprecision(5)<<x1<<";";
cout<<"x2=";
cout<<fixed<<setprecision(5)<<x2<<endl;
}
else if(x1>x2)
{
swap(x1,x2);
cout<<"x1=";
cout<<fixed<<setprecision(5)<<x2<<";";
cout<<"x2=";
cout<<fixed<<setprecision(5)<<x1<<endl;
}
return 0;
}