1058:求二次方程
时间限制:1000 ms 内存限制:65536 KB
题目描述
利用公式 \(x_1=\frac{-b+\sqrt{b^2-4ac}}{2a}\),\(x_2=\frac{-b-\sqrt{b^2-4ac}}{2a}\),求一元二次方程 \(ax^2+bx+c=0\) 的根,其中 \(a \ne 0\)。 结果要求精确到小数点后 5 位。
输入
输入一行,包含三个浮点数 \(a,b,c\)(它们之间以一个空格分开),分别表示方程 \(ax^2+bx+c=0\) 的系数。
输出
- 输出一行,表示方程的解。
- 若两个实根相等,输出形式为:
x1=x2=...
- 若两个实根不等,且根小者在前,输出形式为:
x1=...;x2=...
- 若无实根,输出
No answer!
所有输出部分要求精确到小数点后 5 位,数字、符号之间没有空格。
输入样例
-15.97 19.69 12.02
输出样例
x1=-0.44781;x2=1.68075
说明
按判别式 \(\Delta = b^2 - 4ac\) 判断根的情况:
- \(\Delta < 0\):无实根;
- \(\Delta = 0\):有且仅有一个实根(重根);
- \(\Delta > 0\):有两个不相等的实根,按从小到大输出。
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main() {
double a = 0, b = 0, c = 0;
cin >> a >> b >> c;
cout << fixed << setprecision(5);
double delta = (b * b - 4 * a * c);
if (delta < 0) {
cout << "No answer!";
}
else {
double x1 = (-b + pow(delta, 0.5)) / (2 * a);
double x2 = (-b - pow(delta, 0.5)) / (2 * a);
if (delta > 0) {
cout << "x1=" << min(x1, x2) << ";x2=" << max(x1, x2);
}
else if (delta == 0) {
cout << "x1=x2=" << x1;
}
}
return 0;
}