Inversion des chiffres d'un entier
Bonjour à tous !
J'ai un exercice donné à mon cours d'algorithmique basé sur la récursivité. On me demande d'inverser les chiffres d'un nombre ( 1234 devient 4321). Je vois bien comment je dois le faire de manière itérative, mais je ne parviens vraiment pas à passer à une méthode récursive, j'ai beau essayer de jouer avec les modulos 10 et les divisions entière par 10, je n'arrive pas au bon résultat :/
J'ai essayé une ébauche de code, je comprends pourquoi ca ne fonctionne pas, mais je n'arrive pas à en venir au bout :/ Je n'ai trouvé nul part sur le net une solution avec un algorithme itératif :/
Mon code actuel :
Code:
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 31 32
| #include<stdio.h>
#include<conio.h>
int Inversion(int);
int main(){
int nbr, nbri;
printf("Entrez un nombre a inverser : ");
fflush(stdin);
scanf("%d", &nbr);
nbri=Inversion(nbr);
printf("%d\t--->\t%d",nbr, nbri);
getch();
return 0;
}
int Inversion(int nb){
int mod, div;
mod=nb%10;
div=nb/10;
if(div!=0){
return 10*Inversion(div)+mod;
}else{
return mod;
}
} |
Si vous avez une solution je suis preneur ! :D
Merci d'avance
Solution à l'inversion des digits d'un entier
Salut, je suis tombé sur le même genre d'exercice et en quelques boucle on peut tout a fait le faire.
Code:
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| /*==================[ RENVERSER ENTIER ]====================*/
/*
DESCRIPTION : Renverse les digits d'uen entier donné
PARAMETRES : Un entier quelconque
RETOURNE : Un entier constitué des digits renversé.
SPÉCIFICATIONS : Les valeurs négatives sont prises en cpmpte par
leurs valeurs absolues.
*/
int reverse_digit(int n);
/*====================================================================*/
/*====================================================================*/
/*
STRATÉGIE: Cas particulier de 0 (11)
On commence par retirer les zero en derniere position (aa)
On compte le nombre de digit(bb)
On parcour les digits et on les agoute en puissance de 10(cc)
*/
int reverse_digit(int n) {
int buffer = n;
int reverse = 0;
int compteur = 0;
int zero = 0;
//Selon specifications
n = abs(n);
//11
if (n == 0) { return 0; }
//aa
while (n % 10 == 0) { n /= 10; }
//bb
while (buffer != 0) {
++compteur;
buffer /= 10;
}
//cc
while (compteur != 0) {
--compteur;
reverse += (n % 10) * (int)pow(10, compteur);
n /= 10;
}
return reverse;
}
/*====================================================================*/ |