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.
Gracias por la explicacion!!
ResponderEliminarYo 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");
}
}
Gracias por el gran trabajo ;).
ResponderEliminarAñ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");
}
}
}
Este comentario ha sido eliminado por el autor.
ResponderEliminarGracias por el gran trabajo ;).
ResponderEliminarAñ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");
}
}
Hola, si mal no veo, te faltaria un "for" para imprimir todos los indices de tu arreglo "VA"
ResponderEliminarte dejo la version corregida de tu version @Andrew
ResponderEliminarpackage 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");
}
}
}
}
Hola necesito ayuda con algo, en caso de que el número no sea
Eliminarcapicú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
fue de mucha ayuda!!
ResponderEliminar