Convertir un nombre dans la base de votre choix (c)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 247 fois - Téléchargée 36 fois

Contenu du snippet

Voilà, c'est un tout petit code simple qui part du principe que a=bq+r qui permet de convertir des nombres en base de la base 2 (binaire) à la base 35 (après il manque des lettres ;)) en passant par l'héxadécimal (16). C'est très simple (et ça pourrait sûrement être mieux fait) mais ça m'a servi donc je le mets.

Source / Exemple :


void cbase(b,n)  
 int b,n;  
 {  
  int q,t,a,tl[100];  
  float r;  
  q=n/b;  
  tl[0]=(n-(b*q));  
  t=1;  
  while(q>0)  
  {  
        a=q;  
        q/=b;  
        r=(a-(b*q));  
        tl[t]=r;  
        ++t;  
 }  
  --t;  
  while(t>=0)  
  {  
      if ( tl[t] < 10 ) {  printf(" %d",tl[t]); }  
      else { printf(" %c",tl[t] + 55 );  }  
        --t;  
  }  
  }  
  main()  
 {  
  int base,nombre;  
  char reponse;  
    do  
  {  
  do  
  {  
  printf("Quelle base voulez vous utiliser (bases de 2 à 35) ? ");  
  scanf(" %d",&base);  
  printf("Entrez le nombre entier en d%ccimal :",130);  
  scanf(" %d",&nombre);  
  }  
  while(base<2 || base>35);  
  cbase(base, nombre);  
  scanf(" %c",&reponse);  
 }  
 while(reponse != 'n');  
}

Conclusion :


Afin de faciliter le code, je n'ai pas utilisé les bases par puissances ( n = an*b^n + ... + a1*b+a0 en base b). En fait, en divisant un nombre par la base voulue, puis en redivisant les quotients obtenus par la base et ainsi de suite jusqu'à ce que le quotient soit nul, on obtient tout simplement le nombre dans la base souhaitée en prenant tous les restes de chaque division, du dernier reste jusqu'au premier.

A voir également

Ajouter un commentaire Commentaires
Mal_au_DOS Messages postés 39 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 28 octobre 2008
22 juin 2006 à 15:44
Pas mal c'est vrai que c'est pratique moi j'ai fait la même chose ya longtemps mais en plus soigné lol A+
cs_necromagik Messages postés 3 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 25 juillet 2006
12 févr. 2006 à 17:16
La "vieille façon" c'est le style K&R :)
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008
18 févr. 2005 à 21:12
Oui, j'ai appris C sur des vieux livres ^^
Enfin, ça fait quelques temps que j'ai fait ce bout de code, juste que je ne l'ai pas retouché depuis ;)
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
18 févr. 2005 à 19:14
void cbase(b,n)
int b,n;

Je ne me souviens du nom qu'on donne a ce genre de definition, mais c la 'vieille' facon, tu peux tout simplement faire : void cbase(int b, int n);

Voila, ct juste au cas ou tu ne saches pas ;)

++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.