洛谷B2053
题目描述
利用公式 :
求一元二次方程 ax^2+bx+c=0
其中 a 不等于 0。结果要求精确到小数点后5 位。
输入格式
输入一行,包含三个浮点数 a,b,c(它们之间以一个空格分开),分别表示方程 ax^2+bx+c=0
输出格式
输出一行,表示方程的解。
若两个实根相等,则输出形式为:x1=x2=aaaa;
若两个实根不等,在满足根小者在前的原则,则输出形式为:x1=aaaa;x2=bbbb;
若无实根输出 No answer!。
所有输出部分要求精确到小数点后 5位,数字、符号之间没有空格。
代码:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
double a,b,c;
//输入三个数
cin>>a>>b>>c;
//计算x1和x2
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<<fixed<<setprecision(5)<<"x1=x2="<<x1;
//如果不相等,调整成题目要求的格式
else if(x1<x2)
cout<<fixed<<setprecision(5)<<"x1="<<x1<<";"<<"x2="<<x2;
else if(x1>x2)
{
//如果x1大于x2,则进行交换,变成符合格式的输出
swap(x1,x2);
cout<<fixed<<setprecision(5)<<"x1="<<x1<<";"<<"x2="<<x2;
}
else
cout<<"No answer!";
return 0;
}
结果: