/*----------------------------------------------------------*/ /* */ /* AUTHOR : Eric VIOLARD */ /* E-MAIL : violard@icps.u-strasbg.fr */ /* ORGANISM : Université Louis Pasteur (Strasbourg) */ /* CREATION : 08/11/02 */ /* */ /* ---------------------------------------------------------*/ /* Définition de quelques petites fonctions de manipulation des chiffres d'un nombre entier et programme de test. */ #include /* pour utiliser les fonctions scanf et printf */ int nb_chiffres(int n) /* calcul le nombre de chiffres d'un nombre entier n */ /* pré-condition: n>=0 */ { int quotient10; /* variable dont les valeurs sont les quotients obtenus en divisant n par 1, puis 10, puis 100,... */ int r; /* résultat */ /* --- on compte le nombre de divisions par 10 nécessaires pour obtenir un quotient nul --- */ quotient10=n; r=0; do { quotient10=quotient10/10; r=r+1; } while(quotient10!=0); return r; } int chiffre_unite(int n) /* calcul le chiffre des unités d'un nombre entier n */ /* pré-condition: n>=0 */ { return n%10; } int puissance10(int n) /* calcul la nème puissance de 10 */ /* pré-condition: n>=0 */ { int i; /* compteur de 1 à n */ int mult10=1; /* prend les valeurs 1,10,100,... */ for(i=1;i<=n;i++) mult10=mult10*10; return mult10; } int ieme_chiffre(int i, int n) /* calcul le ième chiffre d'un nombre entier n */ /* pré-condition: n>=0 && 1<=i<=nb_chiffres(n) */ { /* --- on prend le chiffre des unités du quotient de n par 10^(nb_chiffre(n)-i) --- */ return chiffre_unite(n/puissance10(nb_chiffres(n)-i)); } int rotation_gauche(int n) /* rotation d'un chiffre vers la gauche */ /* pré-condition: n>=0 */ { /* --- on prend le reste de n divisé par 10^(nb_chiffre(n)-1), on multiplie par 10 et on ajoute le 1er chiffre de n --- */ return n%puissance10(nb_chiffres(n)-1)*10+ieme_chiffre(1,n); } int rotation_droite(int n) /* rotation d'un chiffre vers la droite */ /* pré-condition: n>=0 */ { /* --- on divise n par 10 et on ajoute chiffre_unite(n)*10^(nb_chiffre(n)-1) --- */ return n/10+puissance10(nb_chiffres(n)-1)*chiffre_unite(n); } int inversion_chiffres(int n) /* inversion des chiffres d'un nombre entier */ /* pré-condition: n>=0 */ { int r; /* résultat */ int i; /* numéro d'un chiffre de n */ /* --- on place les chiffres de n du dernier jusqu'au premier en bonne place dans le résultat --- */ r=0; for(i=nb_chiffres(n);i>=1;i--) r=r*10+ieme_chiffre(i,n); return r; } int somme_chiffres(int n) /* somme des chiffres d'un nombre entier */ /* pré-condition: n>=0 */ { int r; /* résultat */ int i; /* numéro d'un chiffre de n */ r=0; for(i=1;i<=nb_chiffres(n);i++) r=r+ieme_chiffre(i,n); return r; } main() { /* déclarations */ int n; /* un nombre entier */ int i; /* numéro d'un chiffre de n */ /* --- lecture d'un nombre entier --- */ printf("Entrer un nombre entier : "); scanf("%d",&n); /* --- test des fonctions --- */ printf("Ce nombre comporte %d chiffres\n",nb_chiffres(n)); printf("Son chiffre des unités est %d\n",chiffre_unite(n)); for(i=1;i<=nb_chiffres(n);i++) printf("Son %dème chiffre est %d\n",i,ieme_chiffre(i,n)); printf("Le nombre obtenu par rotation à gauche est %d\n",rotation_gauche(n)); printf("Le nombre obtenu par rotation à droite est %d\n",rotation_droite(n)); printf("Le nombre obtenu par inversion des chiffres est %d\n",inversion_chiffres(n)); printf("La somme de ses chiffres est %d\n",somme_chiffres(n)); }