Hola a todos, hoy os voy a explicar como saber si un número es capicúa o no en Java.
Un número capicúa, es aquel que es igual leído de izquierda a derecha y de derecha a izquierda, por ejemplo, 12321 es capicúa ya que si invertimos el numero sigue siendo el mismo.
Para saber si un numero capicúa, necesitamos convertir un numero en un array y este invertirlo para ver que sean iguales.
Os dejo un tutorial sobre como obtener los dígitos de un número:
https://www.discoduroderoer.es/obtener-todos-los-digitos-de-un-numero-en-java
Os dejo un tutorial sobre como invertir un array:
https://www.discoduroderoer.es/invertir-array-en-java/
Veamos como hacerlo en código:
import java.util.Arrays; import java.util.Scanner; public class Capicua { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Introduce un numero"); int numero = sn.nextInt(); int original[] = devuelveDigitos(numero); int invertido[] = invertirArray(original); if(Arrays.equals(original, invertido)){ System.out.println("El numero " + numero + " es capicua"); }else{ System.out.println("El numero " + numero + " no es capicua"); } } /** * Invierte los datos de un array * * @param array Array que contiene los datos * @return Devuelve un nuevo array con los datos invertidos */ public static int[] invertirArray(int array[]) { if (array == null) { return null; } int temp[] = new int[array.length]; for (int i = temp.length - 1, j = 0; i >= 0; i--, j++) { temp[i] = array[j]; } return temp; } public static int[] devuelveDigitos(int numero) { // Si el numero es 0 // Creamos un array de una posicion if (numero == 0) { int digitos[] = {0}; return digitos; } // Creamos un array con tantas posiciones como cifras tiene el numero int digitos[] = new int[cuentaCifras(numero)]; int digito; // Pasamos el numero a positivo int numeroOriginal = Math.abs(numero); for (int i = 0, j = digitos.length - 1, copiaNumero = numeroOriginal; numeroOriginal > 0; i++, j--) { // Divimos la copia entre 10 copiaNumero /= 10; // Obtenemos el digito, numero original menos la copia multiplicada por 10 digito = numeroOriginal - (copiaNumero * 10); // guardamos el digito en el array digitos[j] = digito; // Actualizamos el numero original numeroOriginal = copiaNumero; } return digitos; } public static int cuentaCifras(int num) { int contador = 0; if (num == 0) { contador = 1; } else { for (int i = Math.abs(num); i > 0; i /= 10) { contador++; } } return contador; } }
Veamos el resultado:
Vamos a hacerlo en función para reutilizarlo:
import java.util.Arrays; import java.util.Scanner; public class Capicua { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Introduce un numero"); int numero = sn.nextInt(); if(esCapicua(numero)){ System.out.println("El numero " + numero + " es capicua"); }else{ System.out.println("El numero " + numero + " no es capicua"); } } public static boolean esCapicua(int numero){ // Genero un array int original[] = devuelveDigitos(numero); // Invertimos el array int invertido[] = invertirArray(original); // Si el array son iguales, es capicua return Arrays.equals(original, invertido); } /** * Invierte los datos de un array * * @param array Array que contiene los datos * @return Devuelve un nuevo array con los datos invertidos */ public static int[] invertirArray(int array[]) { if (array == null) { return null; } int temp[] = new int[array.length]; for (int i = temp.length - 1, j = 0; i >= 0; i--, j++) { temp[i] = array[j]; } return temp; } public static int[] devuelveDigitos(int numero) { // Si el numero es 0 // Creamos un array de una posicion if (numero == 0) { int digitos[] = {0}; return digitos; } // Creamos un array con tantas posiciones como cifras tiene el numero int digitos[] = new int[cuentaCifras(numero)]; int digito; // Pasamos el numero a positivo int numeroOriginal = Math.abs(numero); for (int i = 0, j = digitos.length - 1, copiaNumero = numeroOriginal; numeroOriginal > 0; i++, j--) { // Divimos la copia entre 10 copiaNumero /= 10; // Obtenemos el digito, numero original menos la copia multiplicada por 10 digito = numeroOriginal - (copiaNumero * 10); // guardamos el digito en el array digitos[j] = digito; // Actualizamos el numero original numeroOriginal = copiaNumero; } return digitos; } public static int cuentaCifras(int num) { int contador = 0; if (num == 0) { contador = 1; } else { for (int i = Math.abs(num); i > 0; i /= 10) { contador++; } } return contador; } }
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta