题解 | 计算一元二次方程

计算一元二次方程

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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务