Reto Números de Lychrel en Java

Hola querido lector, cómo estáis? Yo la verdad estoy bastante bien, con mucha energía, y nada he estado viendo un par de retos de aceptaelreto.com, y he visto un reto, en el cual voy a aprovechar código de otro tutorial que hice «invertir palabras en Java«, para ello:

Cuando se aburren, los aficionados a las matemáticas se dedican a jugar con los números. Eso les lleva, por ejemplo, a coger cualquier número, darle la vuelta y sumarlo a sí mismo, repitiendo el proceso una y otra vez hasta dar con un número capicúa. Por ejemplo, para el 91 llegamos a un capicúa en sólo dos pasos:
91 + 19 = 110
110 + 011 = 121
Algunos números se resisten a alcanzar un capicúa. El 196 es el número más pequeño para el que no se ha llegado a ninguno, por más que se ha intentado. Los matemáticos no han podido demostrar que, efectivamente, no vaya a llegarse a uno. Mientras continúan buscando una demostración, los aficionados siguen sumando y sumando con la esperanza de llegar a él. Los números con los que, se sospecha, no puede alcanzarse un capicúa se conocen como números de Lychrel. Curiosamente, algunos números capicúa parecen ser también números de Lychrel.

Entrada

La entrada comienza con un número indicando la cantidad de casos de prueba que vendrán a continuación. Cada caso de prueba estará compuesto de un número 1 ≤ n ≤ 100.000.

Salida

Para cada caso de prueba n, el programa deberá indicar el número de iteraciones que hay que dar hasta llegar a un número capicúa, seguido del número capicúa alcanzado. Si durante el proceso se llega a un número mayor que 1.000.000.000, se deberá asumir que el capicúa no es alcanzable y escribir «Lychrel?«1.

Aquí dejo los pasos para resolver este problema
1) Agarro un número
2) Lo convierto en texto
3) Le doy la vuelta
4)Lo convierto en Entero y lo comparo con el original

Aquí les dejo el código:

        int numeroFacilitado;
        int numOri;
        int numeroInvertido;
        Scanner sca = new Scanner(System.in);
        String stringFacilitado;
        String stringInvertido;
        int longitud;
        boolean repetir = true;
        boolean lychrel = true;
        int maximo = 100000;
        int contador = 0;

        try {
            System.out.println(«Escríbame algún número:»);
            numeroFacilitado = sca.nextInt();
            numOri = numeroFacilitado;
            stringFacilitado = numeroFacilitado + «»;
            do {

                stringInvertido = «»;
                stringFacilitado = numeroFacilitado + «»;
                longitud = (int) stringFacilitado.length() – 1;
                do {

                    stringInvertido = stringInvertido + stringFacilitado.charAt(longitud);//nos devuele el carácter en la posición
                    longitud = longitud – 1;//vamos restando posiciones

                } while (longitud >= 0);

                numeroInvertido = Integer.parseInt(stringInvertido);

                if (numeroInvertido == numeroFacilitado) {
                    System.out.println(numOri + » » + numeroFacilitado + » en » + (contador) + » iteraciones»);
                    lychrel = false;
                    repetir = false;
                }
                numeroFacilitado = numeroFacilitado + numeroInvertido;
                contador = contador + 1;
            } while (contador < maximo && repetir);
            if (lychrel == true) {
                System.out.println(«Lychrel?»);
            }
        } catch (Exception ex) {
            System.out.println(«Debes de poner un número válido»);
        }

Bueno espero que os haya gustado y entretenido, si quieres recibir más contenido similar te recomiendo que te suscribas a mi página en facebook que está al principio de esta web.

FUENTE
https://www.aceptaelreto.com/problem/statement.php?id=205

0 0 votos
Article Rating
Subscribe
Notify of
guest
0 Comments
Comentarios en línea
Ver todos los comentarios