题解 | 计算一元二次方程
计算一元二次方程
https://www.nowcoder.com/practice/7da524bb452441b2af7e64545c38dc26
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c;
// 处理多组输入
while (scanf("%lf %lf %lf", &a, &b, &c) != EOF) {
if (a == 0) {
printf("Not quadratic equation\n");
continue;
}
// 计算判别式
double delta = b * b - 4 * a * c;
// 使用容差值比较浮点数
const double EPSILON = 1e-8;
if (fabs(delta) < EPSILON) { // 判别式近似为0
double root = -b / (2 * a);
// 确保输出+0.00而非-0.00
if (fabs(root) < EPSILON) {
root = 0.0;
}
printf("x1=x2=%.2lf\n", root);
} else if (delta > EPSILON) { // 判别式大于0
double sqrt_delta = sqrt(delta);
double x1 = (-b + sqrt_delta) / (2 * a);
double x2 = (-b - sqrt_delta) / (2 * a);
// 确保x1 <= x2
if (x1 > x2) {
double temp = x1;
x1 = x2;
x2 = temp;
}
// 确保输出+0.00而非-0.00
if (fabs(x1) < EPSILON) x1 = 0.0;
if (fabs(x2) < EPSILON) x2 = 0.0;
printf("x1=%.2lf;x2=%.2lf\n", x1, x2);
} else { // 判别式小于0
double real_part = -b / (2 * a);
double imaginary_part = sqrt(-delta) / (2 * fabs(a));
// 确保实部为+0.00而非-0.00
if (fabs(real_part) < EPSILON) {
real_part = 0.0;
}
printf("x1=%.2lf-%.2lfi;x2=%.2lf+%.2lfi\n",
real_part, imaginary_part, real_part, imaginary_part);
}
}
return 0;
}
