#17292: 為甚麼測試時是AC,但解是NA


karta1447452 (jack)


#include<iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b,c,x1,x2;
double i;
while(cin >> a >> b >> c)
{
i = sqrt(b*b-4*a*c);
if(i>0)
{
x1 = (-b+i)/2*a;
x2 = (-b-i)/2*a;
cout << "Two different roots x1=" << x1 << " , x2=" << x2 << endl;
}
else if(i==0)
{
x1 = -b/2*a;
cout << "Two same roots x=" << x1 << endl;
}
else
{
cout << "No real root" << endl;
}
}
return 0;
}
#17298: Re:為甚麼測試時是AC,但解是NA


freedom501999@gmail.com (帥氣魔方生)


#include
#include
using namespace std;
int main()
{
int a,b,c,x1,x2;
double i;
while(cin >> a >> b >> c)
{
i = sqrt(b*b-4*a*c);
if(i>0)
{
x1 = (-b+i)/2*a;
x2 = (-b-i)/2*a;
cout << "Two different roots x1=" << x1 << " , x2=" << x2 << endl;
}
else if(i==0)
{
x1 = -b/2*a;
cout << "Two same roots x=" << x1 << endl;
}
else
{
cout << "No real root" << endl;
}
}
return 0;
}

你先把判別式開根號了

如果判別式是負的,開根號會有問題,所以不應該先開

若判別式小於 0,不用開根號直接輸出無解,等於0也不用算根號

只有判別式大於0才要算根號值