IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Inversion des chiffres d'un entier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !
    Merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Tu peux par exemple permuter les premier et dernier chiffres puis appliquer à nouveau l'algorithme sur le nombre composé des chiffres qui se trouvent entre les deux ; ainsi de suite jusqu'à ce que le nombre en entrée soit composé de moins de deux chiffres (au « centre »).

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Tu peux aussi : Pour afficher un nombre dans l'ordre inverse :
    On commence par afficher la fin du nombre.
    Puis s'il reste quelque chose à afficher (condition facile à trouver) on affiche la suite (ce qui revient à appeler récursivement sur ce qui reste du nombre)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut
    Le problème est que je ne dois pas juste l'afficher, il doit se retrouver dans un autre entier.
    Intervertir les premier et derniers nombres pourrait etre une bonne idée, mais je ne vois pas comment je pourrais aller chercher ce premier chiffre, le nombre etant de longueur quelconque :/

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 787
    Par défaut
    Hello,

    Si tu as droit à tous les outils (pas comme dans certaines écoles), il y a une méthode très simple: tu fais un sprintf() du nombre dans une variable char[ ], tu inverses la variable char[ ], et tu récupères la solution par un atol() ( ou atoi() ). That's all, folk.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 4
    Par défaut
    En fait ce qui est frustrant c'est que j'ai changé d'ecole et je connaitrais plein de moyen de le faire :p
    Mais dans mon contexte, on a pratiquement que les outils de bases ( operations arithmetiques, modulo), le but étant de faire un algorithme très général et de le faire en une seule fonction
    Comme je n'utilise qu'une seule fonction qui prend en argument l'entier à inverser, le mettre dans un char[] me parait compliquer a cause de la recursivité ( ce qui reviendrait a chaque fois a le transformé en char[] )

    J'avais deja vu pas mal d'algorithme permettant de regler ce problème en n'utilisant que des addition multiplication, division et modulo mais de manière itérative. Théoriquement il devrait y avoir moyen de faire pareil de manière récursive mais apres plusieurs heures de reflexion je n'y parvient toujours pas :/ Mais merci quand meme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction de calcul de somme des chiffres d'un entier
    Par sam343 dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2009, 17h35
  2. Extraction des chiffres d'un entier
    Par adrian07 dans le forum Pascal
    Réponses: 5
    Dernier message: 21/04/2009, 17h22
  3. Réponses: 6
    Dernier message: 01/02/2009, 00h14
  4. [Tableaux] Aide pour inverser des chiffres
    Par Equinoxe5 dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2008, 23h32
  5. Permutations, maximum et minimum des chiffres d'un entier
    Par JetliMohamed dans le forum Pascal
    Réponses: 14
    Dernier message: 29/01/2008, 22h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo