У меня есть СЛЕДУЮЩИЙ КОД для конкурса 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;
}
Это обычно деление на ноль ошибка.
В вашем коде есть два оператора деления.
1:
totitem = (n/k);
где вы не дезинфицируете свой вклад.
2:
har1=factorial(i);
har2=factorial(n-i);
totways+=(ansh/(har1*har2));
И это не удастся, если любой из параметров хар равен нулю.
Наиболее вероятная причина проблемы заключается в том, что вы используете 32-разрядные целые числа со знаком (int) для выполнения факториальных вычислений, которые ограничены факториалом 12! Попытка сделать факториал с большими числами вызовет переполнение и, следовательно, неверный результат и, в конечном итоге, нулевое значение, которое вызвало ошибку времени выполнения.
Других решений пока нет …