Hola a todos, hoy os voy a explicar como validar si un numero es un numero armstrong o narcisista.
Un número armstrong es aquel igual a sus dígitos elevados al número de dígitos, por ejemplo, el 371 es un número armstrong porque 371 = 33 + 73 + 13
Puedes comprobar si un número es armstrong aquí.
Preparando todo lo necesario
En primer lugar, debemos preparar todo lo necesario, en este caso pediremos un número.
Para obtener los dígitos de un número, ya lo hicimos en este tutorial:
Para la anterior función, necesitamos calcular el número de dígitos, lo hicimos en este tutorial:
package es.discoduroderoer.app; import java.util.Scanner; public class Principal { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe un numero"); int num = sn.nextInt(); } public static int cuentaCifras(int num) { int contador = 0; if (num == 0) { contador = 1; } else { for (int i = Math.abs(num); i > 0; i /= 10) { contador++; } } return contador; } public static int[] devuelveDigitos(int numero) { // Si el numero es 0 // Creamos un array de una posicion if (numero == 0) { int digitos[] = {0}; return digitos; } // Creamos un array con tantas posiciones como cifras tiene el numero int digitos[] = new int[cuentaCifras(numero)]; int digito; // Pasamos el numero a positivo int numeroOriginal = Math.abs(numero); for (int i = 0, j = digitos.length - 1, copiaNumero = numeroOriginal; numeroOriginal > 0; i++, j--) { // Divimos la copia entre 10 copiaNumero /= 10; // Obtenemos el digito, numero original menos la copia multiplicada por 10 digito = numeroOriginal - (copiaNumero * 10); // guardamos el digito en el array digitos[j] = digito; // Actualizamos el numero original numeroOriginal = copiaNumero; } return digitos; } }
Algoritmo para calcular un número armstrong
Para saber si un número es un número armstrong, obtendremos los digitos del numero que hemos pedido y obtendremos la suma de cada cifra elevada al numero de digitos del numero.
Si la suma final coincide con el número inicial es un número armstrong.
package es.discoduroderoer.app; import java.util.Scanner; public class Principal { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe un numero"); int num = sn.nextInt(); int[] cifras = devuelveDigitos(num); int numCifras = cifras.length; int suma = 0; for (int i = 0; i < cifras.length; i++) { suma += Math.pow(cifras[i], numCifras); } if(suma == num){ System.out.println("El número " + num + " es un número armstrong"); }else{ System.out.println("El número " + num + " no es un número armstrong"); } } public static int cuentaCifras(int num) { int contador = 0; if (num == 0) { contador = 1; } else { for (int i = Math.abs(num); i > 0; i /= 10) { contador++; } } return contador; } public static int[] devuelveDigitos(int numero) { // Si el numero es 0 // Creamos un array de una posicion if (numero == 0) { int digitos[] = {0}; return digitos; } // Creamos un array con tantas posiciones como cifras tiene el numero int digitos[] = new int[cuentaCifras(numero)]; int digito; // Pasamos el numero a positivo int numeroOriginal = Math.abs(numero); for (int i = 0, j = digitos.length - 1, copiaNumero = numeroOriginal; numeroOriginal > 0; i++, j--) { // Divimos la copia entre 10 copiaNumero /= 10; // Obtenemos el digito, numero original menos la copia multiplicada por 10 digito = numeroOriginal - (copiaNumero * 10); // guardamos el digito en el array digitos[j] = digito; // Actualizamos el numero original numeroOriginal = copiaNumero; } return digitos; } }
Resultados
Por último, ya podemos probar nuestro programa.
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta