programmation Java (école d'ingénieur) · Chapitre 2 · Exercice de TD
Factorielles
Types, variables et expressions · niveau 2
Énoncé
On calcule puis , d'abord dans un int, puis dans un long. Comparer. Pourquoi le résultat dans l'int est-il faux ? Pourquoi est-il positif, alors que le dépassement donne souvent un nombre négatif ? Jusqu'à quelle factorielle un long suffit-il ?
Corrigé
public class Factorielles {
public static void main(String[] args) {
int fi = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12;
long fl = 1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12;
System.out.println("12! int = " + fi + ", long = " + fl);
fi = fi * 13;
fl = fl * 13;
System.out.println("13! int = " + fi + ", long = " + fl);
}
}
12! int = 479001600, long = 479001600
13! int = 1932053504, long = 6227020800
dépasse : l'int calcule modulo . Or , qui est positif et inférieur à : le résultat faux a l'air plausible, ce qui le rend dangereux. Le dépassement ne donne un nombre négatif que si le résultat réduit tombe au-delà de . Le suffixe 1L force tous les produits en long. Un long (jusqu'à environ ) contient , mais pas .
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.