北理04年复试上机之一元二次方程

题目

建立一个求一元二次方程解的类(a*x^2+b*x+c=0),输入系数a,b,c 的值后打印出这个方程的解。

Input

输入第一行为样例数m,接下来m行每行3个整数a、b、c。

3
1 -3 2
1 -2 1
2 1 2

Output

输出m行,要求格式如下:若无解则输出-1,若有单解则输出x=..,若有两解则输出x1=…,x2=…,具体参见样例,保留小数点后两位。

x1=1.00,x2=2.00
x=1.00
-1

code

#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
const double esp = 1e-6;

class Answer
{
private:
int m_a, m_b, m_c;
public:
    Answer(){};
    Answer(int a, int b, int c);
    void show();
};

Answer::Answer(int a, int b, int c)
{
    m_a = a;
    m_b = b;
    m_c = c;
}

void Answer::show()
{
    int delt = pow(m_b, 2) - 4 * m_a * m_c;
    double ans1, ans2;
    if (m_a == 0)
    {
        if (m_b != 0)
        {
            ans1 = -m_c*1.0 / m_b;
            printf("x=%.2lf\n", ans1);
        }
        else
        {  
            if(m_c == 0)
            {
                cout << "x=0.00" << endl;
            }
            else
            {
                cout << "-1" << endl;
            }

        }

    }  
    else if (delt < 0)
    {
        cout << "-1" << endl;
    }
    else if (delt == 0)
    {
        ans1 = (-m_b) * 1.0 / (2 * m_a);
        printf("x=%.2lf\n", ans1);
    }
    else if (delt > 0)
    {
        ans1 = double((-m_b - sqrt(delt)) / (2 * m_a));
        ans2 = double((-m_b + sqrt(delt)) / (2 * m_a));
        printf("x1=%.2lf,x2=%.2lf\n", ans1, ans2);
    }
}


int main()
{
    // freopen("E:\input.txt", "r", stdin);
    int m;
    cin >> m;
    while (m--)
    {
        int a, b, c;
        cin >> a >> b >> c;
        Answer ans(a, b, c);
        ans.show();
    }
    return 0;
}

注意

当a = 0时,要分好几种情况讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值