Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Números narcisistas o de Armstrong

Números narcisistas o de Armstrong

Autor jc mouse domingo, julio 21, 2019

Los números narcisistas o números de Armstrong son aquellos números enteros positivos  cuya suma de las n-ésimas potencias de sus dígitos son ellos mismos. Es decir:

Numero Narcisista en Java

  • Existen sólo 88 números narcisistas en base 10, el más grande con 39 dígitos es:  115.132.219.018.763.992.565.095.597.973.971.522.401
  • Todos los números de una cifra son narcisistas

A continuación código java que determina si un numero dado es narcisista o no:

/**
 * @see http://www.jc-mouse.net/
 * @author mouse
 */
public class Main {

    public static void main(String[] args) {

        //numeros narcisistas
        int[] numeros_de_prueba = {
            1,//Si
            7,//Si
            11,//No
            153,//Si
            267,//No
            370,//Si
            666,//No
            1634,//Si
            3071,//No
            8208,//Si
            27310,//No
            54748//Si
        };

        for (int numero : numeros_de_prueba) {
            System.out.println("> NUMERO : " + numero);
            System.out.println((numeroNarcisista(numero))
                    ? "[" + numero + "] ES UN NUMERO NARCISISTA"
                    : "[" + numero + "] NO ES UN NUMERO NARCISISTA");
        }

    }

    /**
     * Metodo que calcula su un numero de N digitos es o no narcisista
     *
     * @param numero variable a calcular
     * @return boolean TRUE: es un numero narcisista FALSE: NO es un numero
     * narcisista
     */
    public static boolean numeroNarcisista(int numero) {
        int tmp;
        int resto;
        int total = 0;
        int n = 0; //cantidad de digitos

        tmp = numero;

        //Obtiene la cantidad de digitos
        do {
            tmp /= 10;
            n++;
        } while (tmp != 0);
        System.out.println("     Cantidad de digitos = " + n);

        tmp = numero;
        //calcula el numero de Armstrong
        do {
            resto = tmp % 10;            
            double total_parcial = Math.pow(resto, n); 
            System.out.printf(" [ (%d^%d) = %.0f ] ", resto,n,total_parcial);
            total += total_parcial; //calcula potencia N y acumula al total            
            System.out.print(((tmp /= 10) != 0) ? "+" : " = ");
        } while (tmp != 0);
        System.out.println(total);

        return total == numero;
    }

}

Ejecutando obtenemos:

run:
> NUMERO : 1
     Cantidad de digitos = 1
 [ (1^1) = 1 ]  = 1
[1] ES UN NUMERO NARCISISTA
> NUMERO : 7
     Cantidad de digitos = 1
 [ (7^1) = 7 ]  = 7
[7] ES UN NUMERO NARCISISTA
> NUMERO : 11
     Cantidad de digitos = 2
 [ (1^2) = 1 ] + [ (1^2) = 1 ]  = 2
[11] NO ES UN NUMERO NARCISISTA
> NUMERO : 153
     Cantidad de digitos = 3
 [ (3^3) = 27 ] + [ (5^3) = 125 ] + [ (1^3) = 1 ]  = 153
[153] ES UN NUMERO NARCISISTA
> NUMERO : 267
     Cantidad de digitos = 3
 [ (7^3) = 343 ] + [ (6^3) = 216 ] + [ (2^3) = 8 ]  = 567
[267] NO ES UN NUMERO NARCISISTA
> NUMERO : 370
     Cantidad de digitos = 3
 [ (0^3) = 0 ] + [ (7^3) = 343 ] + [ (3^3) = 27 ]  = 370
[370] ES UN NUMERO NARCISISTA
> NUMERO : 666
     Cantidad de digitos = 3
 [ (6^3) = 216 ] + [ (6^3) = 216 ] + [ (6^3) = 216 ]  = 648
[666] NO ES UN NUMERO NARCISISTA
> NUMERO : 1634
     Cantidad de digitos = 4
 [ (4^4) = 256 ] + [ (3^4) = 81 ] + [ (6^4) = 1296 ] + [ (1^4) = 1 ]  = 1634
[1634] ES UN NUMERO NARCISISTA
> NUMERO : 3071
     Cantidad de digitos = 4
 [ (1^4) = 1 ] + [ (7^4) = 2401 ] + [ (0^4) = 0 ] + [ (3^4) = 81 ]  = 2483
[3071] NO ES UN NUMERO NARCISISTA
> NUMERO : 8208
     Cantidad de digitos = 4
 [ (8^4) = 4096 ] + [ (0^4) = 0 ] + [ (2^4) = 16 ] + [ (8^4) = 4096 ]  = 8208
[8208] ES UN NUMERO NARCISISTA
> NUMERO : 27310
     Cantidad de digitos = 5
 [ (0^5) = 0 ] + [ (1^5) = 1 ] + [ (3^5) = 243 ] + [ (7^5) = 16807 ] + [ (2^5) = 32 ]  = 17083
[27310] NO ES UN NUMERO NARCISISTA
> NUMERO : 54748
     Cantidad de digitos = 5
 [ (8^5) = 32768 ] + [ (4^5) = 1024 ] + [ (7^5) = 16807 ] + [ (4^5) = 1024 ] + [ (5^5) = 3125 ]  = 54748
[54748] ES UN NUMERO NARCISISTA

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Impresión de reportes con JasperReport + YAPA

Impresión de reportes con JasperReport + YAPA

En un post anterior [Guardar reporte PDF directamente con Jasperreports] vimos una manera de imprimir reportes directame...

Tojorí – Java/MySQL

Tojorí – Java/MySQL

Tojorí es una libreria Java/Mysql para la creación de aplicaciones de base de datos utilizando el IDE de Netbeans desde...

Convertir imagen a Base64

Convertir imagen a Base64

En este post vemos un ejemplo de como convertir un archivo de imagen en una cadena de texto codificado en Base64 aprovec...

Google Play elimina todas las Apps sobre Coronavirus

Google Play elimina todas las Apps sobre Coronavirus

El gigante de la informática Google, ante la reciente pandemia mundial declarada por la OMS (Organización Mundial de la...

SDKMAN: Administrador del kit de desarrollo de software

SDKMAN: Administrador del kit de desarrollo de software

SDKMAN! es una herramienta para la administración de versiones paralelas de varios programas de desarrollo de software c...

Crea presentaciones Power Point desde Java

Crea presentaciones Power Point desde Java

Apache POI es la API de Java para el trabajo con archivos de Microsoft como son Word, Excel y Power Point. Apache POI se...

Comparte lo que sabes

Categorias

Últimas entradas

Una clase JTree permite mostrar datos de una forma jerárquica y en realidad este objeto no contiene sus datos; es decir,...

Los archivos digitales (txt, docx, xlsx, odt, odp, pdf, etc) nos permiten almacenar información el cual en ocasiones, de...

En este post crearemos un botón swing que reproducirá un sonido cuando este sea presionado por el usuario.  Sin mas que...

Muchas veces necesitamos de fotos para adornar nuestros perfiles en RRSS pero no queremos subir nuestras propias fotos p...

Herramientas

Generador de Enlaces a Whatsapp