Решение квадратного уравнения, написать полностью корректный код для решения любого квадратного уравнения

Задача состоит в следующем: Дано уравнение:

ax2 + bx + c = 0.

Необходимо написать программу, которая по введённым целочисленным параметрам a,b,c решит это уравнение. На вход даются три целых числа - a,b,c, по модулю не превышающих 1000. В выходной файл через пробел необходимо вывести количество корней этого уравнения, после этого все корни этого уравнения в порядке неубывания, если этого сделать нельзя, то вывести -1.

Казалось бы, простая задача? Не тут-то было. Я перепробовала все способы, но чтобы ее приняли, необходимо рассмотреть все варианты решения. Вот мой код:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    int d;
    d = (b * b) - (4 * a * c);
    if (a == 0)
    {
        if (b != 0)
        {
            cout << 1 << " " << (-c / b);
        }
        if (b == 0)
        {
            cout << -1;
        }
    }
    if ((a != 0) and (b == 0) and (c == 0))
    {
        cout << 1 << " " << 0;
    }
    else
    {
        if (d >= 0){
            int x1, x2;
            x1 = (-b + sqrt(d)) / (2 * a);
            x2 = (-b - sqrt(d)) / (2 * a);
            if (x1 == x2)
            {
                cout << 1 << " " << x1;
            }
            if (x1 > x2)
            {
                cout << 2 << " " << x2 << " " << x1;
            }
            if (x2 > x1)
            {
                cout << 2 << " " << x1 << " " << x2;
            }
        }
    }
}

Ответы (1 шт):

Автор решения: DmitryK

Вы делаете расчеты с целыми числами, а это неправильно. Да коэффициенты у вас - целые числа, но результаты операций - нет.

cout << 1 << " " << (-c / b); // неправильно

// должно быть например так
cout << 1 << " " << static_cast<double>(-c) / b;
// или в "старом" стиле с
cout << 1 << " " << double(-c) / b;

Или сразу объявить коэффициенты числами типа double

// аналогично здесь результат с плавающей точкой присваивается целому числу
int x1, x2;
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);

И ещё вы пропустили вариант с отрицательным дискриминантом.

       if (d >= 0)
        {
            double x1 = (-b + sqrt(d)) / (2.0 * a);
            double x2 = (-b - sqrt(d)) / (2.0 * a);
            if (x1 == x2)
                cout << 1 << " " << x1;
            else 
            if (x1 > x2)
                cout << 2 << " " << x2 << " " << x1;
            else
                cout << 2 << " " << x1 << " " << x2;
        }
        else // вариант с отрицательным дискриминантом
            cout << -1;
→ Ссылка