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

PicarOS: Sistema Operativo Educativo para niños

PicarOS: Sistema Operativo Educativo para niños

PicarOS Diego es una distribución GNU/Linux basada en Debian enfocada principalmente en la educación dentro del aula rec...

Microservicio REST Java con Spark – Parte 1

Microservicio REST Java con Spark – Parte 1

En este y un segundo post desarrollaremos un microservicio java utilizando el framework Spark que implementara las funci...

Construye tu swing Versus para el mundial 2014

Construye tu swing Versus para el mundial 2014

Para ponerse a tono con el ambiente mundialista de Brasil 2014, en este post construiremos un swing java al que llamarem...

Servicio Web SOAP en Java

Servicio Web SOAP en Java

En este post vamos a construir un Servicio Web bajo el protocolo SOAP (Simple Object Access Protocol) el cual básicament...

Conexión MySQL y C#

Conexión MySQL y C#

En este post vamos a crear una aplicación sencilla para conectar C# con MySQL. Manos a la obra 🙂 Necesitamos – Con...

Node.js: Instalación, configuración y Hola Mundo

Node.js: Instalación, configuración y Hola Mundo

No se puede negar la popularidad que ganaron las aplicaciones de JavaScript en los últimos años, y las bibliotecas dispo...

Comparte lo que sabes

Categorias

Últimas entradas

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...

Las matemáticas son fundamentales para la vida y aparte de las actividades clásicas de enseñanza desarrolladas en el aul...

MVC es un patrón de arquitectura de software que separa una aplicación en tres componentes lógicos principales.  Estos s...

Microsoft acaba de lanzar Cascadia Code una fuente monoespaciada enfocada en proporcionar una mejor experiencia en conso...

Herramientas

Generador de Enlaces a Whatsapp