Factoriel d’un nombre
Cesarking
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
S’il vous plaît j’aimerais écrire un programme qui calcule le factoriel d’un nombre avec la boucle répéter et je n’évite sais comment faire svp aidez moi
S’il vous plaît j’aimerais écrire un programme qui calcule le factoriel d’un nombre avec la boucle répéter et je n’évite sais comment faire svp aidez moi
Configuration: iPhone / Safari 11.0
2 réponses
-
Bonjour
Écrire un programme.... Dans quel langage ?
-
Salut Cesarking,
Il n'y a pas de réelle difficulté dans le calcul proprement dit. Il suffit de déclarer une variable compteur initialisée à 1 et une variable de résultat initialisée à 1 aussi, et d'utiliser une bouclefor
ouwhile
, oudo ... while
, incrémentant à chaque itération le compteur, multipliant le contenu de cette variable compteur avec celui de la variable résultat, jusqu'à ce que (1) le compteur atteigne le nombre dont la factorielle est recherchée, ou (2) que la capacité de représentation de nombres entiers du type choisi atteigne sa limite. Dans ces deux cas, il faut sortir de la boucle :
- dans le cas (1), en affichant le résultat
- dans le cas (2), en affichant un message d'erreur indiquant que ne résultat dépasse les capacités
C'est ce dernier cas qui est le moins évident à traiter. Tu as une bonne méthode là illustrée là : https://stackoverflow.com/questions/47244227/how-to-determine-the-maximum-value-for-which-a-program-can-calculate-factorial-u (pour faire cette vérification avant de multiplier)
Dal-
dans ce topic sur SO, c'est à cette réponse que je fais allusion (n'utilise pas le code posté par la personne posant la question, qui n'est pas fiable, mais celui-là) : https://stackoverflow.com/questions/47244227/how-to-determine-the-maximum-value-for-which-a-program-can-calculate-factorial-u/47244258#47244258
Dans cet exemple, le calcul intermédiaire est dans une variableunsigned long long int factorial
eti
est un entier servant de compteur incrémenté. Avant de multiplier le calcul intermédiaire par une nouvelle valeur dei
on vérifie quefactorial <= ULLONG_MAX / i
.
ULLONG_MAX
est déterminé pour ton compilateur dans l'entête standardlimits.h
...
Si ce test échoue, c'est que l'on dépasserait donc ULLONG_MAX en multipliant, et la factorielle ne peut être calculée avec ce type.
-