Ошибка выполнения — SIGFPE

У меня есть СЛЕДУЮЩИЙ КОД для конкурса hackerearth и НАПИСАНО на C ++ (g ++ 4.8.4)
это дает SIGFPE во время выполнения
Я только что закончил с этим

Пожалуйста, расскажите, как это исправить

    #include<iostream>
using namespace std;
int factorial(int n);
int main()
{
int n , k ,totitem , totways=0 , har1,har2, ansh=1;
int res;
cin>>n>>k;
totitem = (n/k);

ansh=factorial(n);

if(totitem>0)
for(int i=0;i<=totitem*k;i+=k)
{
har1=factorial(i);
har2=factorial(n-i);
totways+=(ansh/(har1*har2));
}

cout<<totways;

return 0;
}
int factorial(int n)
{
if(n>1)
return n*factorial(n-1);
else
// if(n==0 || n==1)
return 1;
}

-2

Решение

Это обычно деление на ноль ошибка.

В вашем коде есть два оператора деления.

1:

totitem = (n/k);

где вы не дезинфицируете свой вклад.

2:

har1=factorial(i);
har2=factorial(n-i);
totways+=(ansh/(har1*har2));

И это не удастся, если любой из параметров хар равен нулю.

Наиболее вероятная причина проблемы заключается в том, что вы используете 32-разрядные целые числа со знаком (int) для выполнения факториальных вычислений, которые ограничены факториалом 12! Попытка сделать факториал с большими числами вызовет переполнение и, следовательно, неверный результат и, в конечном итоге, нулевое значение, которое вызвало ошибку времени выполнения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]