Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Números narcisistas o de Armstrong

Números narcisistas o de Armstrong

Por 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 https://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

Artículos similares

Códigos QR con estilo: Domina la personalización con JavaScript

El desarrollo web moderno exige no solo funcionalidad, sino también un poco de estética diferenciada en cada componente[...]

Atlas Integral de Riesgo del Municipio de La Paz

La Alcaldía de la ciudad de La Paz encabezado por Iván Arias presentó el lunes por la noche el «Atlas Integral del Riesg[...]

Command: La Vía Rápida para Automatizar Backups (mysqldump)

Los comandos (Command) en Laravel son scripts PHP que se ejecutan a través de la interfaz de línea de comandos Artisan p[...]

Búsqueda dinámica en JList

Un JList nos permite almacenar objetos en una lista y mostrarlos gráficamente en una serie vertical en el cual el usuari[...]

Incrustar reporte en formulario java

Jasperreport nos brinda su propio visor de reportes, sin embargo en ocasiones queremos mostrar los informes directamente[...]

CUF: Código Único en Kotlin

En este post implementamos en lenguaje Kotlin (lenguaje de programación de tipado estático que corre sobre la máquina vi[...]