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 :

comparer chiffres d'un nombre un à un


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut comparer chiffres d'un nombre un à un
    Bonjour à tous,

    voilà je galère un petit peu pour faire une fonction. J'ai deux nombres en base trois (j'ai préalablement fait une fonction me permettant de passer de base 10 à base 3).

    Mon idée est de comparer chaque chiffres de ces deux nombres un par un et de noter le nombre de différences.

    j'avais commencer par faire un bout de code de ce genre :

    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
    int haveDiff(int a, int b) {
      int result =0;
      int divEntiereA,divEntiereB;
      int i = 0;
      int max=a;
      if (a<b) {
        max = b;
      }
      while ((max /pow(10,i)) > 1) {
        i++;
      }
      while (i>0) {
        divEntiereA = a/10*i;
        divEntiereB = b/10*i;
        if (divEntiereA != divEntiereB) {
    	result++;    
        }
        i--;
      }
      return result;
    }
    Mais ce code ne marche pas à cause des zéros, je m'explique, je souhaite que pour les nombres : 0000 et 1000 cela me renvoie une seule différence mais dans ma fonction telle qu'elle est faîte, cela me prend 0 et 1000 donc 3 différences.

    La solution pourrait être de passer mes nombres en string mais cela m'intéresse beaucoup moins que les entiers. Voyez vous une solution pour m'aider ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Si j'ai bien compris, tu prend un nombre en base 10 stocké sur un int, tu convertis ce nombre en base 3 et tu stockes le résultat sur un int. Donc 1000[3]==27[10].
    Ensuite tu veux comparer les digits de 2 nombres en base 3 stockés sur des ints ?
    Et bien, tout simplement traite les comme s'ils étaient en base 10 :
    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
    33
    34
    #include <iostream>
     
    template<int Base>
    int convert(int source_)
    {
       int result = 0;
       int mult = 1;
       while(source_){
          result += (source_%Base)*mult;
          mult*=10;
          source_ = source_/Base;
       }
       return result;
    }
     
    int nbr_digit_different(int nbr_1_, int nbr_2_)
    {
       int resultat = 0;
       while(nbr_1_||nbr_2_){
          resultat += ((nbr_1_%10)!=(nbr_2_%10))?1:0;
          nbr_1_/=10;
          nbr_2_/=10;
       }
       return resultat;
    }
     
    int main()
    {
       std::cout
          <<"27 = "<<convert<3>(27)<<std::endl
          <<"0 = "<<convert<3>(0)<<std::endl
          <<"Diff = "<<nbr_digit_different(convert<3>(27),convert<3>(0))<<std::endl
       ;
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    Bonjour,

    c'est en effet exactement ce que je voulais.

    Merci beaucoup pour ce code clair et très simple à comprendre.

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

Discussions similaires

  1. Comment rechercher un chiffre dans un nombre ?
    Par christophe_halgand dans le forum MATLAB
    Réponses: 5
    Dernier message: 05/01/2008, 10h52
  2. Séparer les différents chiffres d'un nombre
    Par Sandro Munda dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/10/2006, 18h48
  3. Réponses: 2
    Dernier message: 18/07/2006, 11h40
  4. Réponses: 11
    Dernier message: 18/07/2006, 11h03
  5. Récupérer 1er chiffre d'un nombre dans une requête
    Par beletteroi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/06/2006, 13h33

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