Número capicúa en Java

Comprobar si un número es capicúa en Java

Un número es capicúa si se puede leer igual de derecha a izquierda que de izquierda a derecha. Ejemplos de números capicúas: 121, 3003, 1234321, 33, 445544, etc.
Vamos a escribir un programa Java que pida por teclado un número entero N de más de una cifra y verifique si es capicúa.
import java.util.Scanner;

public class Numero_Capicua {

    public static void main(String[] args) {
        int N, aux, inverso = 0, cifra;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.print("Introduce un número >= 10: ");
            N = sc.nextInt();
        } while (N < 10);
       
        //le damos la vuelta al número
        aux = N;
        while (aux!=0){
            cifra = aux % 10;
            inverso = inverso * 10 + cifra;
            aux = aux / 10;
        }
    
        if(N == inverso){
            System.out.println("Es capicua");
        }else{
            System.out.println("No es capicua");
        }
    }
}

Para resolverlo, lo que hemos hecho es darle la vuelta al número y comprobar si el número invertido es igual al original.
El procedimiento para obtener el número invertido, al que hemos llamado inverso, es el siguiente:
Si por ejemplo N = 121
inverso = 0
Repetimos estos pasos hasta que N valga 0:
Obtenemos la última cifra de N: cifra = N % 10 -> cifra = 121 % 10 -> cifra = 1
Se lo sumamos al contenido de inverso multiplicado por 10
inverso = inverso * 10 + cifra -> inverso = 0 * 10 + 1 -> inverso = 1
Quitamos la última cifra a N: N = N / 10 -> N = 121 / 10 -> N = 12
Repetimos el proceso:
Obtenemos la última cifra de N: cifra = N % 10 -> cifra = 12 % 10 -> cifra = 2
Se lo sumamos al contenido de inverso multiplicado por 10
inverso = inverso * 10 + cifra -> inverso = 1 * 10 + 2 -> inverso = 12
Quitamos la última cifra a N: N = N / 10 -> N = 12 / 10 -> N = 1
Repetimos el proceso:
Obtenemos la última cifra de N: cifra = N % 10 -> cifra = 1 % 10 -> cifra = 1
Se lo sumamos al contenido de inverso multiplicado por 10
inverso = inverso * 10 + cifra -> inverso = 12 * 10 + 1 -> inverso = 121
Quitamos la última cifra a N: N = N / 10 -> N = 1 / 10 -> N = 0

El proceso para invertir el número finaliza cuando N = 0. Ahora comprobamos si el número invertido es igual al original. En ese caso el número es capicúa.

2 comentarios:

  1. Gracias por la explicacion!!
    Yo le agrege al codigo el calculo de los numeros negativos.

    public void numeroCapicua(){
    Scanner scanner = new Scanner(System.in);
    int numero;
    int aux;
    int inverso= 0;
    do{
    System.out.println("Ingresa un nuemero");
    numero= scanner.nextInt();
    }while (numero<10 && numero > -10);

    aux = numero;

    while(aux!=0) {
    int cifra = aux % 10;
    inverso = inverso * 10 + cifra;
    aux = aux / 10;
    }
    if(numero == inverso){
    System.out.println("numero capicua");
    }else {
    System.out.println("El numero no es capicua");
    }
    }

    ResponderEliminar
  2. Gracias por el gran trabajo ;).
    Añado mi propia versión para poder capturar los errores al no meter valores numéricos.

    public class Cosa1 {

    static Scanner sn = new Scanner(System.in);

    public static void main(String[] args) {

    String numeroString;
    String inversoString = "";
    int numero = 0;
    int inverso = 0;

    do {

    System.out.println("Introduce un numero mayor de 10");
    numeroString = sn.nextLine();
    for (int i = numeroString.length() - 1; i >= 0; i--) {
    inversoString += numeroString.charAt(i);
    }
    try {
    numero = Integer.valueOf(numeroString);
    inverso = Integer.valueOf(inversoString);
    } catch (NumberFormatException e) {
    System.out.println("Debe ser un valor numerico");
    inversoString = "";
    }
    } while (numero <= 10);

    if (numero == inverso) {
    System.out.println("Es capicua");
    } else {
    System.out.println("No es capicua");
    }

    }

    }

    ResponderEliminar