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

Te enseño como generar imagenes con Google Bard

Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y[...]

Convertir imagenes JPEG a video MOV

Googleando me encontré con una interesante clase java «JpegImagesToMovie» que convierte imágenes JPEG a vídeo MOV de[...]

Hola Mundo con Slim Framework

Slim es un micro framework para PHP que nos ayuda a escribir rápidamente aplicaciones Web y APIs sencillas pero poderosa[...]

El indice TIOBE

El índice TIOBE (TIOBE, The Importance of Being Earnest – «La importancia de ser honesto» – referencia a la[...]

Blog MVC – Iniciando el proyecto [p2]

Segunda parte del tutorial [Crea tu blog con el patrón MVC y php]. En esta 2da parte toca ver lo que es la creación del[...]

Sistema de gestión de stock – El Controlador (Parte 5)

Para terminar el tutorial, debemos unir tanto la VISTA como el MODELO y para eso esta el CONTROLADOR. o.O El controlador[...]