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.