Combinaison / factorielle

sacredead Messages postés 94 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 22 décembre 2011 - 3 oct. 2010 à 17:22
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 - 4 oct. 2010 à 08:51
bonjour,
j'aimerais écrire une équation comportant des combinaisons C(n,k).
étant donné que je ne connais pas la syntaxe, j'aimerais passer par les factorielles (et un système de renvoie de données).
le problème est lorsque je rentre des valeur de n important (>15) mon programme me renvoie une valeur fausse!
cela vient il de mes déclarations int/long ?
existe t'il un autre moyen ?

voila mon programme

#include <stdio.h>


int factorielle(int n)
{
long resultat;

if(n<=0)
{
return 1;
}
else
{
for(resultat =1; n > 1; n--)
{
resultat *= n;
}
}

return resultat;
}


int main()
{
int n;
long resultat;

printf("Entrez un nombre...\n ");
scanf("%d", &n);
resultat = factorielle(n);

printf("Le fact est %d\n", resultat);

return 0;
}



merci pour votre aide

1 réponse

cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
4 oct. 2010 à 08:51
Salut,

En effet, un int, c'est 32 bits dont un pour le signe, donc au delà de 2147483647, ça déborde. Et 15!, c'est 1307674368000, d'où le débordement.

En revanche, il est possible (voire souhaitable) de calculer les coefficients binomiaux sans calculer de factorielle (même en ne faisant que des additions !). Je t'invite à t'intéresser au Triangle de Pascal.

N'hésite pas à revenir poser des questions.

Bonne prog,
0
Rejoignez-nous