Un número capicúa es aquél que se lee igual de izquierda a derecha, que de derecha a izquierda. Por ejemplo 22,101, 202, 343, 3443, 12233221,…
Una de las formas de saber si un número es capicúa es pasándolo a una cadena y utilizando el código para detectar si la palabra es un palindromo. Para ello puedes leerte el artículo «Saber si una palabra es un palindromo con Java».
Pero es este caso vamos ha realizarlo mediante operaciones matemáticas. La idea es muy sencilla. Tomaremos el número inicial, le daremos la vuelta y comprobaremos que siguen siendo iguales. En este caso tendremos un número capicúa.
Lo primero será definir nuestro número. Para ello podemos utilizar cualquier tipo de dato nativo: int, double, long,… En nuestro ejemplo vamos a utilizar un long.
long numero = 544333234432333445L;
long falta,numeroInvertido,resto;
Además del número necesitamos otras variables, numero Invertido que almacenará el número dado la vuelta, resto, donde dejaremos los restos de las divisiones y falta, que es la variable con los números que faltan para dar la vuelta.
Inicializamos estas tres variables a 0
while(numero<=0);
falta=numero;
numeroInvertido=0;
resto=0;
Los pasos que hay que dar son los siguientes:
1. Para obtener el último dígito del número lo haremos con el resto de una división entre diez. Es decir, si de 4224 queremos obtener el último dígito haremos la siguiente operación:
4224%10 = 4
En código Java será:
resto=falta%10;
Falta tiene el número del que vamos substrayendo dígitos.
2. Del número original hay que quitarle el último dígito. En este caso utilizamos la división entre 10.
4224/10=422
En código Java será:
falta=falta/10;
3. Habrá que guardar el número substraído. Para ello simplemente lo sumaremos al número que tengamos, multiplicado por 10. En el primer caso lo haremos sobre el 0. Las secuencias para el número 4224 será:
0*10+4=4
4*10+2=42
42*10+2=422
422*10+4=4224
En código Java:
numeroInvertido=numeroInvertido*10+resto;
Todo esto lo repetiremos mientras tengamos algo por analizar. El bucle entero sería el siguiente:
while(falta!=0)
{
resto=falta%10;
numeroInvertido=numeroInvertido*10+resto;
falta=falta/10;
}
Solo nos quedará comprobar si el número original y el invertido son iguales:
if(numeroInvertido==numero)
System.out.println("\nEl numero es capicua\n");
else
System.out.println("\nEl numero no es capicua\n");