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

Conoce VAR lo nuevo de Java 10

Java ha ido evolucionando a pasos agigantados en los últimos años gracias al pedido de su comunidad global de programado[...]

Script PHP – Mouse responde

«Mouse Responde…» simula ser un alma en pena que responde cualquier pregunta que le hagan, al estilo del juego de[...]

Crea tu lector de códigos QR

En este post desarrollaremos una aplicación que nos permitirá leer un código QR y capturar la información que contiene y[...]

Procedimientos Almacenados: Parámetros IN

Una procedimiento almacenado es un conjunto de sentencias de SQL que se pueden almacenar en el servidor, de esta forma n[...]

CRC32: Verificación de Redundancia Cíclica

El CRC o Verificación de Redundancia Cíclica o Comprobación de redundancia cíclica  es una técnica utiliz[...]

Criba de Eratóstenes animado

Eratóstenes era un matemático griego del siglo  III a.C. el cual ideó una manera rápida de obtener todos los números pri[...]