Как найти дискриминант
Даны коэффициенты квадратного уравнения. Выясните, сколько корней у этого квадратного уравнения.
Входные данные: На ввод дано три целых числа a, b и c именно в таком порядке. −10^6 ≤ a,b,c≤ 10^6,a≠0
Выходные данные: Выведите одно целое число: количество корней квадратного уравнения ax^2+bx+c=0.
Вот мой код:
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
long double dis;
dis = b * b - 4 * a * c;
if (dis > 0)
cout << 2;
else if (dis == 0)
cout << 1;
else
cout << 0;
return 0;
}
Я нашел проблему(как мне кажется), что при значении b = 10^6 и при попытке возвести b^2 тип duble не выдерживает и выдает ошибку, есть ли какой-нибудь способ решить эту проблему? (Как в итоге оказалось проблема в том, что умножал два int, в комментариях написано)
Ответы (3 шт):
Привет попробуй этот код у меня всё работает
#include <iostream>
using namespace std;
int main ()
{
int a, b, c;
cin >> a >> b >> c;
long double dis;
dis = b * b - 4 * a * c;
if (dis > 0)
cout << 2;
else if (dis == 0)
cout << 1;
else
cout << 0;
return 0;
}
Не хотел, но, похоже, придется отвечать, а то тут так и будут плавающую точку к целым числам тулить...
#include <iostream>
using namespace std;
int main() {
long long a, b, c;
cin >> a >> b >> c;
a = b*b - 4*a*c;
cout << (a == 0 ? 1 : a > 0 ? 2 : 0) << endl;
}
Я не согласен с мнением Harry и остальных, кто говорит что double не подходит для решения задачи. double поддерживает точную целочисленную арифметику для значений < 253. Для входных данных верно |a|, |b|, |c| ≤ 106. Любые промежуточные значения не превосходят 5·1012, что меньше чем 253:
#include <iostream>
int main() {
double a, b, c;
std::cin >> a >> b >> c;
double d = b * b - 4. * a * c;
std::cout << (d == 0 ? 1 : d > 0 ? 2 : 0) << '\n';
}