# Descripción del problema

El problema radica en la necesidad de saber la equivalencia de un numero en un sistema numérico con base diferente a diez (10) ya que en muchas áreas de las matemáticas y la computación se necesita trabajar en otros sistemas numéricos a parte del decimal como lo son el binario, el octal, el hexadecimal, entre otros. De allí la idea de tener una aplicación que resuelva este problema fácil y rápidamente evitándonos cálculos tediosos y repetitivos.

# Limitaciones

En si esta aplicación no tiene limitaciones en cuanto a la parte del diseño algorítmico ya que este está modelado para transformar cualquier numero sin importar lo grande que sea. La limitación real se encuentra en la maquina ya que esta tiene una memoria que es finita. La aplicación tiene datos de tipo entero, si se va a trabajar con números mucho mas grandes existen los tipos de datos long o los BigInteger que requieren de un manejo diferente pero que no es complicado. Este algoritmo esta diseñado para números enteros mayores o iguales que cero Y la base debe estar entre 2 y 16. Además se debe controlar todo tipo de excepción del lenguaje JAVA.

# Solución

La solución del problema es una aplicación hecha en lenguaje JAVA utilizando una estrategia de programación denominada PROGRAMACION DINAMICA la cual se basa en el uso de tablas o tipos de datos similares para evitar la repetición de cálculos matemáticos. La solución consta de dos clases de las cuales una es utilizada para comenzar la aplicación, pedir los datos al usuario y mostrar los resultados. La otra clase se emplea en la solución del problema mediante métodos matemáticos.

# Descripción del código

En la Clase Aplicación se piden los datos de entrada y se muestran los resultados finales. El constructor de la clase Base inicializa e instancia todas las variables y los objetos de esta. El método transformar se encarga de la función principal la cual es llevar el numero ingresado en base diez a la base que hemos pedido en un principio. A medida que vamos encontrando un digito del nuevo número se almacena en una casilla del Array digitos el cual por medio del método tamaño va incrementando su capacidad de almacenamiento de uno en uno con ayuda del Array auxiliar. Por último se necesita ordenar los digitos en un String para mostrarlos en el orden que es ya que en el Array digitos estos se encuentran de atrás hacia adelante eso si teniendo en cuenta que cuando la base es mayor a diez los digitos {10,11,12,13,14,15} se deben reemplazar por las letras {A,B,C,D,E,F} respectivamente.

# Orden de complejidad

Este Algoritmo presenta un orden de complejidad O(log (n))

# Pruebas

Ejemplos :
| Numero | Base | Resultado |
| 10 | 2 | 1010 |
| 10 | 8 | 12 |
| 16 | 16 | 10 |
| 15455456 | 2 | 111010111101010011100000 |
| 1089978205 | 16 | 40F7BF5D |
| 35655 | 9 | 53816 |
| 554455 | 2 | 10000111010111010111 |

# Forma de compilar y ejecutar

Se puede compilar y ejecutar en cualquier IDE que reconozca lenguaje JAVA como lo es el JCREATOR o el ECLIPSE en cualquiera de sus versiones. Para ejecutarlo se debe crear un proyecto que contenga estas dos clases(Aplicación, Base) y en ellas copiar el código que aparece anteriormente.

# Conclusiones

→ Se puede concluir primero que todo que la programación dinámica es buena porque nos ayuda a evitar la repetición de cálculos y procesos.
→ Un problema bien solucionado algorítmicamente no tiene limitaciones, como si las tiene una solución mecánica que solo se adapta a unos casos específicos.