2016-08-27 1 views
-2

J'AI le code suivant pour competetion hackerearth et en C++ (g ++ 4.8.4) il donne SIGFPE sur l'exécution je suis juste fait avec elleErreur d'exécution - SIGFPE

plz dire comment tofix il

#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; 
} 

Répondre

1

Il est généralement erreur de division 0 par zéro.

Il existe deux instructions de division dans votre code.

1:

totitem = (n/k); 

où vous ne désinfectez pas votre entrée.

2:

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

Et cela échouera si l'un des paramètres har égal à zéro.

La cause la plus probable du problème est que vous utilisez des entiers signés 32 bits (int) pour effectuer des calculs factoriels, qui sont limités à un factoriel de 12! Essayer de faire des factoriels avec des nombres plus grands entraînera un débordement et donc un résultat incorrect et finalement une valeur nulle, qui a provoqué votre erreur d'exécution.