Question

J'essaie d'écrire un programme C++ qui effectue des conversions de base.

Je souhaite convertir un nombre décimal en toutes les autres bases entières de 2 à 20.

Existe-t-il un algorithme efficace et facile à mettre en œuvre pour les conversions de base ?

Était-ce utile?

La solution

Je ne comprends pas où est le problème exactement?C'est très facile et Straigtforward de faire une conversion de base: vous le faites comme vous le feriez à la main.

  • Divisez le numéro par par base
  • Écrivez le reste
  • Répétez le processus avec la partie entière de la division
  • arrêtez-vous lorsque vous atteignez zéro
  • Les restes dans l'ordre inverse vous donnent les chiffres de la base

Exemple:

1025 (décimal) à la base 15:

1025 / 15 = 68 , remainder 5
68   / 15 =  4 , remainder 8
4    / 15 =  0 , remainder 4

Le nombre de base 15 est 485

Autres conseils

Vous pouvez avoir deux problèmes :

  • Analyse de la base d'origine vers la représentation entière native de l'ordinateur (strtol est plutôt doué pour ça).

  • Formatage dans la nouvelle base.(itoa est plutôt doué pour ça).

Si vous voulez l'écrire vous-même, vous aimerez peut-être le div fonction.Vous entrez le nombre et la base, et cela sépare le chiffre le plus à droite.Répétez pour obtenir tous les chiffres.

Si vous souhaitez être plus efficace, vous pouvez diviser par la base au carré et obtenir deux chiffres à la fois (utilisez une table de recherche pour obtenir les caractères ASCII pour les deux chiffres). Voici un exemple de quelques implémentations très efficaces. Le changer pour utiliser une base différente ne serait pas difficile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top