2016-08-27 3 views
-2

Я следующий код для hackerearth competetion и НАПИСАНО В C++ (г ++ 4.8.4) он дает SIGFPE на время выполнения я только что сделал с нимRuntime Ошибка - SIGFPE

плз скажите как Tofix это

#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

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

В коде есть два деления.

1:

totitem = (n/k); 

, где вы не дезинфицировать ввод.

2:

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

И это не сработает, если какой-либо из параметров Хар равна нулю.

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