/*----------------------------------------------------------*/ /* */ /* AUTHOR : Eric VIOLARD */ /* E-MAIL : violard@icps.u-strasbg.fr */ /* ORGANISM : Université Louis Pasteur (Strasbourg) */ /* CREATION : 02/01/03 */ /* */ /* ---------------------------------------------------------*/ /* 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 r; /* résultat */ if(n<10) r=1; else r=nb_chiffres(n/10)+1; return r; } 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) */ { int r; /* résultat */ if(i==nb_chiffres(n)) r=n%10; else r=ieme_chiffre(i,n/10); return r; } int puissance10(int n) /* calcul la nème puissance de 10 */ /* pré-condition: n>=0 */ { int r; /* résultat */ if(n==0) r=1; else r=puissance10(n-1)*10; return r; } int inversion_chiffres(int n) /* inversion des chiffres d'un nombre entier */ /* pré-condition: n>=0 */ { int r; /* résultat */ if(n<10) r=n; else r=(n%10)*puissance10(nb_chiffres(n)-1)+inversion_chiffres(n/10); return r; } int somme_chiffres(int n) /* somme des chiffres d'un nombre entier */ /* pré-condition: n>=0 */ { int r; /* résultat */ if(n<10) r=n; else r=somme_chiffres(n/10)+(n%10); 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)); 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 inversion des chiffres est %d\n",inversion_chiffres(n)); printf("La somme de ses chiffres est %d\n",somme_chiffres(n)); }