Como saber si un número es capicúa en Java

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.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *