题目
建立一个求一元二次方程解的类(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时,要分好几种情况讨论