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 à la main.

  • diviser le nombre par la base
  • notez le rest
  • répéter le processus avec la partie entière de la division
  • arrêtez quand vous atteignez zéro
  • les rests en 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 en base 15 est 485

Vous pouvez avoir deux problèmes:

  • Analyser à partir de la base d’origine vers la représentation native de l’ordinateur ( strtol est très bon à cela).

  • Formatage 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émentation très efficace. Le changer pour utiliser une base différente ne serait pas difficile.