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.

8 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
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Gracias por el gran trabajo ;).
    Añado mi propia versión para poder averiguar si los valores de un arreglo son capicua (los valores del arreglo ya están definidos).


    public class Arreglo_21 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    int [] VA = new int[10];
    VA[0]=7;
    VA[1]=44;
    VA[2]=33;
    VA[3]=22;
    VA[4]=77;
    VA[5]=88;
    VA[6]=99;
    VA[7]=55;
    VA[8]=43;
    VA[9]=79;

    System.out.println("VECTOR A\n");
    int i;
    for(i=0; i<VA.length; i++) {
    int aux,decimal,inverso=0;
    aux = VA[i];
    while (aux!=0){
    decimal = aux % 10;
    inverso = inverso * 10 + decimal;
    aux = aux / 10;
    }

    if(VA[i] == inverso){
    System.out.println(VA[i]+" Es capicua");
    }else{
    System.out.println(VA[i]+" No es capicua");
    }
    }

    ResponderEliminar
  5. Hola, si mal no veo, te faltaria un "for" para imprimir todos los indices de tu arreglo "VA"

    ResponderEliminar
  6. te dejo la version corregida de tu version @Andrew
    package Arrays;

    import java.util.Scanner;

    public class problema5 {
    public static void main(String[] args) {
    int[] n = new int[5];
    int aux;
    int[] inverso = new int[5];
    int cifra, i;
    Scanner in = new Scanner(System.in);

    for ( i = 0; i < 5; i++) {
    System.out.print("Introduce un número >= 10: ");
    n[i] = in.nextInt();
    }
    //lo damos la vuelta al número
    for ( i = 0; i<5 ;i++) {
    aux = n[i];
    while (aux != 0) {
    cifra = aux % 10;
    inverso[i] = inverso[i] * 10 + cifra;
    aux = aux / 10;
    }
    }
    for ( i = 0; i < 5; i++) {
    if (n[i] != inverso[i]) {
    System.out.println(n[i]+" No es capicua");
    } else {
    System.out.println(n[i]+" Es capicua");
    }
    }
    }
    }

    ResponderEliminar
    Respuestas
    1. Hola necesito ayuda con algo, en caso de que el número no sea
      capicúa como le indico al usuario en cuáles fueron los dígitos donde no cumplió para ser una
      cifra capicúa unicamente en los dígitos de la izquierda y el de la derecha, com seria la funcion

      Eliminar