Conversions de base 10 en base n [fermé]
-
13-12-2019 - |
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 ?
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.