Calcul des factoriels

Fermé
guygugy Messages postés 1 Date d'inscription samedi 16 avril 2016 Statut Membre Dernière intervention 16 avril 2016 - 16 avril 2016 à 15:33
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 16 avril 2016 à 16:17
Bonjour cher membre, j'aimerai écrire un programme qui détermine expérimentalement le dernier nombre factoriel pouvant être
contenu dans un unsigned long, mais je ne sais comment commencer.
S'il vous plait aidez-moi.
Au plaisir vous lire. Merci.
A voir également:

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
16 avril 2016 à 16:17
Bonjour,

Pour ceci, il faut penser à ce qu'il va se passer si on essaie de calculer la factorielle suivante.
Si on effectue une multiplication dont le résultat dépasse la capacité, et bien on obtient tout simplement un résultat faux!
Il faut trouver un nombre tel que factorielle_ul(x) != x * factorielle_ul(x-1). Le résultat est alors factorielle_ul(x-1).
Il faut pour cela utiliser un type plus grand que unsigned long pour voir la différence.
Ou bien vérifier que le factorielle_ul(x) n'est pas multiple de x-1,x-2, ..., 5,4,3,2.
Le code suivant, je suis sûr marche, mais je ne sais pas expliquer pourquoi.
unsigned long factMaxUL() {
    unsigned long fact = 1;
    for ( unsigned long x = 2 ; ; ++x ) {
        unsigned long factSuivante = fact * x;
        if ( factSuivante <= fact )
            return fact; // La plus grande est celle du précédent x
        fact = factSuivante; 
    }
}
0