一元二次方程求根
时间限制:1Sec内存限制:128MB
题目描述
根据给定的a,b,c的值求解方程ax^2+bx+c=0的根。
输入
输入有n+1行,第一行是一个int值,表示测试数据的组数。下面有n行,每行有三个实数,分别为a,b,c的值,用空格隔开。
输出
输出有n行,分别对应输入的每组a,b,c的值输出的结果,每一行具体格式为:
a) 如果方程有两个实根,按从小到大的顺序输出这两个实根,精确到小数点后3位。
b) 如果方程有一个实根,输出这一个实根,精确到小数点后3位。
c) 如果方程没有实根,输出"No real."。
d) 如果方程没有根,输出"No answer."。
e) 如果方程有无穷多根,输出"Inf."。
样例输入
5
1 3 2
1 2 1
1 2 8
0 0 4
0 0 0
样例输出
-2.000 -1.000
-1.000
No real.
No answer.
Inf.
我的初步答案
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int d;
cin >> d;
for (int i = 0; i < d; i++)
{
double a, b, c, x, y,l,x1,x2,x3,x4;
cin >> a >> b >> c;
if ((a != 0 && b != 0)||a!=0)
{
l = b * b - 4 * a*c;
x1 = (-b - sqrt(b*b - 4 * a*c)) / 2 * a;
x2 = (-b + sqrt(b*b - 4 * a*c)) / 2 * a;
x3 = -b / (2 * a);
if (l > 0)
cout << fixed << setprecision(3) << x1 << " " << x2 << endl;
else if (l == 0)
cout << fixed << setprecision(3) << x3 << endl;
else if(l<0)
cout << "No real." << endl;
}
if (a == 0 && b == 0 && c == 0)
cout << "Inf." << endl;
else if (( a == 0 && b == 0)||(a==0))
cout << "No answer." << endl;
}
return 0;
}
输入输出都对上了,但结果还是错的