Exercice 1 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <stdio.h> main() { int X; /* Le chiffre courant */ int N=0; /* Le compteur des décimales */ long VALD=1; /* Valeur de la position décimale courante */ long NOMB=0; /* Le nombre résultat */ do { printf ( "Entrez le %d%s chiffre : " , (N+1), (N)? "e" : "er" ); scanf ( "%d" , &X); if (X<0||X>9) printf ( "\a" ); else if (X) { NOMB += VALD*X; N++; VALD *= 10; } else printf ( "La valeur du nombre renversé est %ld\n" , NOMB); } while (X); return 0; } |
Remarque :
En remplaçant la ligne
NOMB += VALD*X;
par
NOMB += pow(10, N)*X;
on n’a plus besoin de la variable VALD. Il faut cependant inclure les fonctions de la bibliothèque <math>. D’autre part, le calcul de 10N serait alors répété à chaque exécution de la boucle.
Finalement, cette variante est plus lente et plus volumineuse que la première.
Exercice 2 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <stdio.h> main() { int NOMB; /* Le nombre à inverser */ int NINV; /* Le nombre inversé */ /* Attention: en utilisant le type int, il est impossible */ /* d'inverser correctement des nombres comme 10033 ... */ do { printf ( "Entrez un nombre positif (<10000) : " , NOMB); scanf ( "%d" , &NOMB); } while (NOMB<0 || NOMB>9999); NINV=0; while (NOMB>0) { NINV *= 10; NINV += NOMB%10; NOMB /= 10; } /* Autre possibilité : */ /* for (NINV=0 ; NOMB>0 ; NOMB/=10) NINV = NINV*10 + NOMB%10; */ printf ( "Le nombre 'inversé' est : %d\n" , NINV); return 0; } |