La conjetura capicua con Java

23/Jun/2009 Java , , 2 Comentarios

Un número capicua es aquel que se lee igual de derecha a izquierda que de izquierda a derecha (véase Saber si un número es capicua con Java).

La conjetura capicua dice que partiendo de un número natural podemos llegar a obtener un número capicua en un número finito de sumas. Para ello iremos sumando a dicho número su número inverso.

Así tendríamos la siguiente secuencia:

96
96 + 69 = 165
165 + 561 = 726
726 + 627 = 1353
1353 + 3531 = 4884

Lo que vamos a explicar aquí es como hacer la conjetura capicua con Java...

Para empezar podemos leernos el artículo Saber si un número es capicua con Java. Ya que en él se nos explicará el cómo saber si un número es capicua de forma detallada mediante Java.

Lo primero que codificaremos serán un método que nos ayude a invertir un número:

  1. static public long invertirNumero(long numero){...}

Esto ya lo veíamos en detalle dentro de Saber si un número es capicua con Java. Pero veamos el código:

  1. static public long invertirNumero(long numero){
  2.  
  3. long falta,numeroInvertido,resto;
  4.  
  5. falta=numero;
  6. numeroInvertido=0;
  7. resto=0;
  8.  
  9. while(falta!=0) {
  10. resto=falta%10;
  11. numeroInvertido=numeroInvertido*10+resto;
  12. falta=falta/10;
  13. }
  14.  
  15. return numeroInvertido;
  16. }

Podemos observar que mediante operaciones matemáticas y obteniendo el resto de dividirlo entre 10 tenemos el número invertido.

Ahora vamos a la parte central que nos permite aplicar la conjetura capicua con Java. Estaremos en un bucle que vaya comparando el número con su núnero invertido. En caso de que coincidan es que hemos dado con el número capicua.

  1. long numeroInvertido = invertirNumero(numero);
  2. while (numero != numeroInvertido) {...}}

En el caso de no haber dado con el capicua, sumamos el número a su número invertido y volvemos a calcular el número invertido del resultado. Tal y como dice la conjetura capicua.

  1. long numeroInvertido = invertirNumero(numero);
  2. while (numero != numeroInvertido) {
  3. numero+=numeroInvertido;
  4. numeroInvertido = invertirNumero(numero);
  5. }

Si salimos del bucle habremos dado con el número capicua...

Hay que tener en cuenta que el ejercicio trabaja con long. Es decir que si cuando hemos llegado a 9,223,372,036,854,775,807 no hemos encontrado el capicua... mal tema. Así que habrá que controlarlo o trabajar con tipos de datos de mayor precisión.

¿Alguien se anima a explicar cómo podemos hacerlo con mayor precisión?

Vídeos sobre Java Básico


2 comentarios en “La conjetura capicua con Java”

Víctor Cuervo

Gustavo

Gracias por el aporte me fue de gran ayuda

Víctor Cuervo

cambiso

Muy útil el artículo

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*