web-dev-qa-db-fra.com

Conversions de base 10 à n

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

Je veux convertir un nombre décimal à 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?

Je ne comprends pas où est exactement le problème? Il est très facile et direct de faire la conversion de base: vous le faites comme vous le feriez manuellement.

  • diviser le nombre par base
  • notez le reste
  • répéter le processus avec la partie entière de la division
  • arrêtez quand vous atteignez zéro
  • les restes dans l'ordre inverse vous donnent les chiffres dans 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 en base 15 est 485

30
penelope

Vous pouvez avoir deux problèmes:

  • L'analyse de la base d'origine à la représentation entière native de l'ordinateur (strtol est très bonne à cela).

  • Formater dans la nouvelle base. (itoa est assez bon à cela).

Si vous voulez l'écrire vous-même, vous pourriez aimer la fonction div . Vous introduisez le nombre et la base, et le numéro le plus à droite est divisé. Répétez l'opération pour obtenir tous les chiffres.

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

2
Ben Voigt