2012-10-03 29 views
15

Estoy tratando de escribir un programa C++ que haga conversiones base.Base 10 a base de conversiones n

Quiero convertir un número decimal en todas las otras bases entero de 2 a 20.

¿Existe un eficiente y fácil de aplicar el algoritmo de base para las conversiones?

+0

solo hay una forma de convertir números de una a otra base. ¿Cuál es el problema exactamente? –

+0

Cuando dices "todas las otras bases de 2 a 20", ¿supongo que te refieres a todas las bases enteras reales de 2 a 20? ¿Sin bases irreales, y sin bases no enteras? Esos son mas dificiles –

+0

Además, ¿cuál es el problema? Muéstranos el código que tienes hasta ahora. –

Respuesta

23

No entiendo exactamente ¿cuál es el problema? Es muy fácil y sencillo hacer la conversión de base: lo haces como lo harías a mano.

  • división del número por base de
  • anote el resto
  • repita el proceso con la parte entera de la división
  • parada cuando llegue a cero
  • los restos a la inversa orden le da los dígitos en base

Ejemplo:

1025 (decimal) a la base 15:

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

El número en base 15 es 485

2

Es posible que tenga dos problemas:

  • análisis sintáctico de la base original para la representación entera nativa de la computadora (strtol es bastante buena en esto).

  • Formateado en la nueva base. (itoa es bastante bueno en esto).

Si quiere escribirlo usted mismo, le puede gustar el div function. Usted alimenta el número y la base, y divide el dígito más a la derecha. Repita para obtener todos los dígitos.

Si quiere ser más eficiente, puede dividir por la base al cuadrado, y obtener dos dígitos a la vez (use una tabla de búsqueda para obtener los caracteres ASCII para ambos dígitos). Here's an example of some very efficient implementations. Cambiarlo para usar una base diferente no sería difícil.

Cuestiones relacionadas