Factoriel d’un nombre
Fermé
Cesarking
-
19 déc. 2018 à 09:31
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 23 janv. 2019 à 16:13
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 23 janv. 2019 à 16:13
A voir également:
- Factoriel d’un nombre
- Nombre facile - Télécharger - Outils professionnels
- Gto nombre episode ✓ - Forum Jeux vidéo
- Kahoot gratuit nombre de participants - Forum Réseaux sociaux
- Dans ce fichier, réalisez le graphique xy (nuage de points ou dispersion), avec les x en abscisse. dans le graphique, les points dessinent un nombre. lequel ? - Forum Bureautique
- Excel afficher le 0 devant un nombre - Guide
2 réponses
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
19 déc. 2018 à 09:51
19 déc. 2018 à 09:51
Bonjour
Écrire un programme.... Dans quel langage ?
Écrire un programme.... Dans quel langage ?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 23 janv. 2019 à 13:03
Modifié le 23 janv. 2019 à 13:03
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 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
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 boucle
forou
while, ou
do ... 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
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 23 janv. 2019 à 16:13
Modifié le 23 janv. 2019 à 16:13
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 variable
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.
Dans cet exemple, le calcul intermédiaire est dans une variable
unsigned long long int factorialet
iest un entier servant de compteur incrémenté. Avant de multiplier le calcul intermédiaire par une nouvelle valeur de
ion vérifie que
factorial <= ULLONG_MAX / i.
ULLONG_MAXest déterminé pour ton compilateur dans l'entête standard
limits.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.
20 janv. 2019 à 19:47
20 janv. 2019 à 19:48
20 janv. 2019 à 19:53
20 janv. 2019 à 20:13
22 janv. 2019 à 05:55