Exercice 1 :
#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 :
#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; }