feed twitter facebook LinkedIn facebook

Java » Saber si un número es capicua con Java

septiembre 24, 2007 por Víctor Cuervo 70 Comentarios Imprimir Imprimir

Un número capicua es aquél que se lee igual de izquierda a derecha, que de derecha a izquierda. Por ejemplo 22,101, 202, 343, 3443, 12233221,...

Una de las formas de saber si un número es capicua es pasándolo a una cadena y utilizando el código para detectar si la palabra es un palindromo. Para ello puedes leerte el artículo "Saber si una palabra es un palindromo con Java".

Pero es este caso vamos ha realizarlo mediante operaciones matemáticas. La idea es muy sencilla. Tomaremos el número inicial, le daremos la vuelta y comprobaremos que siguen siendo iguales. En este caso tendremos un número capicua.

Lo primero será definir nuestro número. Para ello podemos utilizar cualquier tipo de dato nativo: int, double, long,... En nuestro ejemplo vamos a utilizar un long.

long numero = 544333234432333445L;
long falta,numeroInvertido,resto;

Además del número necesitamos otras variables, numero Invertido que almacenará el número dado la vuelta, resto, donde dejaremos los restos de las divisiones y falta, que es la variable con los números que faltan para dar la vuelta.

Inicializamos estas tres variables a 0

while(numero<=0);
  falta=numero;
  numeroInvertido=0;
  resto=0;

Los pasos que hay que dar son los siguientes:

1. Para obtener el último dígito del número lo haremos con el resto de una división entre diez. Es decir, si de 4224 queremos obtener el último dígito haremos la siguiente operación:

4224%10 = 4

En código Java será:

resto=falta%10;

Falta tiene el número del que vamos substrayendo dígitos.

2. Del número original hay que quitarle el último dígito. En este caso utilizamos la división entre 10.

4224/10=422

En código Java será:

falta=falta/10;

3. Habrá que guardar el número substraído. Para ello simplemente lo sumaremos al número que tengamos, multiplicado por 10. En el primer caso lo haremos sobre el 0. Las secuencias para el número 4224 será:

0*10+4=4
4*10+2=42
42*10+2=422
422*10+4=4224

En código Java:

numeroInvertido=numeroInvertido*10+resto;

Todo esto lo repetiremos mientras tengamos algo por analizar. El bucle entero sería el siguiente:

while(falta!=0)
{
 resto=falta%10;
 numeroInvertido=numeroInvertido*10+resto;
 falta=falta/10;
}

Solo nos quedará comprobar si el número original y el invertido son iguales:

if(numeroInvertido==numero)
 System.out.println("\nEl numero es capicua\n");
else
 System.out.println("\nEl numero no es capicua\n");

Visualizar el ejemplo | Descargar el código

tags: , , ,

Artículos relacionados:

70 comentarios »

RSS feed para los comentarios de esta entrada. TrackBack URI

1 2 3 7
  1. erzelius
    septiembre 28, 2007 #

    kisiera saber,porke el numero despues de dividirse por 10,se multiplica por 10 y a eso se le suma el resto?????

    gracias,disculpen la imcomprension…..

  2. gaudy
    octubre 22, 2007 #

    no confundas no esta divido el % no es division las divisio es la barra “/”
    el tanto por ciento te coje el resto de si lo divria entre 10 vamos q te coje el ultimo numero de 4224 te cojeria el ultimo 4 y eso de multiplicar el numero y sumarle el resto es para darle la vuelta. el numero invertido la primera vez estaria a 0 por inicializacion lo quedaria 4 q es el resto.. vovleria epetir el proceso por q la flata es distinta de cero la segunda vez el numero invertido es 4×10 seria 40 mas resto seria 42… y asi poco apoco vas girando el numero( la ultiplicacion por 10 hace q aumente un digito y la suma del resto q sea el numero q teniamos)

  3. erzelius
    noviembre 2, 2007 #

    muchas gracias gaudy,eres un duro para esto….sabes busco mas ejemplos de arrays,cualkier cosa,me avisas gracias!!!!xd

  4. Martin Areosa
    febrero 26, 2008 #

    porque no meter el numero en un String y recorrer ese String a la inversa, y comparar el resultado de la inversion con el original, con un equals le pregunto si es igual, y listo.

    Digo, no es asi mas facil.

  5. alberto
    marzo 14, 2008 #

    hola no entiendo un problema el problema es el siguiente la suma de los numeros que forman los 5 digitos es igual a los numeros de la primera y segunda pista invertidos

    primera pista = tienes 7 y lo multilplicas por2 y le resta 5 dara un numero que no esta en los 5 digitos

    segunda pista = si al numero 10 lo multiplicas por 100 y le restas 3 veces el numero de la primera pista dara un numero valido de lo 5 digitos hayudame pofavor te lo agradeceria toda mi vida cuales son los numeros de los 5 digitos por favor mandame la repuesta a mi e mail

  6. alberto
    marzo 14, 2008 #

    mi e mail es leninalberto.floresdel@yahoo.es

  7. isaias
    mayo 1, 2008 #

    como puedo colocar el resto (%) en una class para obtener el digito verificador del rut, el codi
    go que cree para esto es este:

    public class Rut {

    private String _rut;
    private char _dv;

    public void setRut(String r, char dv){
    int ac = 0;
    int cte = 2;
    for(int r1 = 0; r1 < _rut.length(); r1++ ){
    ac=ac+_rut.charAt(r1)-’0′;
    if(cte ==7)
    cte=2;
    System.out.println(_rut.charAt(r1)-’0′);
    }
    int res= ac %;
    int dvc = 11, res;
    if((dv=’0′)==dvc)
    throw new DataError(” el dato ingresado es incorrecto “);
    _dv=dv;

    }
    public String toString(){
    return _rut+”-” + _dv;
    }
    }

    ¿cómo puedo hacer para que el resto no me marque error? porfa pueden ayudarme es urgente

  8. isaias
    mayo 1, 2008 #

    mi email en Chack.isa @gmail.com porfa ayudenme

  9. Alex
    mayo 3, 2008 #

    gracias.chee..lo que no entiendo..la funcion que realiza el primer while, osea pone las variables en 0, pero la condicion q teine no me cierra, porq seria mientras numero sea mnor igual q 0 es lo q lea yo ahi.
    espero tu respuesta, gracias..

  10. J_Logan
    agosto 5, 2008 #

    Creo que lo mas rapido y sencillo es lo siguiente:

    1.- String palabra1 = Numero;
    2.- String palabra 2 = invertido(palabra1);
    3.- if(palabra1.equals(palabra2){
    //Capicua
    }

    private static string invertido(string word){
    string result= “”;
    for (int i = word.Length-1; i>= 0; i–)
    result= result+ word.Substring(i, 1);
    return result;
    }

1 2 3 7

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*