Необработанное исключение по адресу 0x00007FF7405C1068 в Проект1.exe: 0xC0000094: Integer division by zero [требует правки]

341
14 сентября 2017, 17:36
#include <iostream>
using namespace std;
int main()
{
    int a, n;
    float s;
    s = 1,5;
    n = 2;
    cout << "vvedite a:";
    cin >> a;
    while (a >= s) {
        n++;
        s += 1 / n;
    }
    cout << "naim n=" << n;
    return 0;
}

в 14 строке (s += 1 / n;) происходит деление на ноль, но я понятия не имею откуда он взялся о:

Необработанное исключение по адресу 0x00007FF7405C1068 в Проект1.exe: 0xC0000094: Integer division by zero.

Answer 1

Самая глупая ошибка у вас в s = 1,5; - в C++ нужно использовать точку, а не запятую.

Вторая по глупости ошибка в том, что вы используете целочисленное деление

s += 1 / n;

которое всегда дает (при n > 1) нуль. Так что программа зациклится, n перевалит за границу допустимого и станет 0.

Но и это еще не все. Все равно ваш метод расчетов для int n не может дать значение выше примерно 22.064778 - это все, что вы можете получить (при n достигающем максимального представимого этим типом значения).

Гармонический ряд - ОЧЕНЬ медленно расходящийся ряд (для того, чтобы сумма превысила 100, необходимо около 1043 элементов ряда). Да, эта сумма станет заведомо больше любого значения... но при таких n, что вашей жизни (а то и жизни вселенной) не хватит, чтоб этого дождаться. Ну, и точности компьютера тоже не хватит :)

Эта задача решается не так - по крайней мере для достаточно больших n.

READ ALSO
Как инициализировать vector&lt;char&gt; строкой?

Как инициализировать vector<char> строкой?

Есть ли возможность сделать инициализацию vector<char> из строки одной строкой кода? Я делаю так:

211
сколка времени надо на чтение числа scanf c++ [требует правки]

сколка времени надо на чтение числа scanf c++ [требует правки]

сколка времени надо на чтение числа scanf c++?

266
Зачем перегружать операции? с++

Зачем перегружать операции? с++

Доброго времени суток

244