/* Números narcisistas
Un número narcisista es un número de n dígitos, que coincide con la suma
de las potencias n-ésimas de sus dígitos. */
#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;
int main(){
/*Varibles declaradas
n -> Cantidad de números a mostrar.
num -> Variable que se ira sumando, representa todos los numeros y en cada ejecucion
del ciclo externo se le suma uno.
numaux,numaux2 -> numero que guarda a num, pero este se modificara en la ejecucion.
i -> Variable para contar los numeros narcicistas encontrados.
cont_dig -> Variable para saber cuantos dígitos tiene la variable narcisista(Sera el exponente).
suma -> suma los valores de cada potencia en los números.
digit -> Es un entero en el cual se van guardando todos los dígitos para luego poder
aplicarle la potencia.
*/
long long n,num=1,numaux,numaux2,i=0,cont_dig;
long long suma,digit;
//Pedimos la cantidad de números que desea ver el usuario
do{
cout<<"CUANTOS NUMEROS NARCISISTAS DESEA BUSCAR: ";
cin>>n;
cout<<endl;
}while(n<1);
//Ejecutamos un ciclo que se seguirá ejecutando hasta que se halle la cantidad pedida
while(i<n){
//Se guarda el numero que tenemos en numaux y se reinicializan los contadores que son requeridos
numaux=num;
numaux2=num;
cont_dig=0;
suma=0;
//Ciclo interno que calcula la cantidad de dígitos, guardando cada digito en un lugar
do{
numaux=numaux/10;
cont_dig++;
}while(numaux>0);
//ciclo que aplica la formula digito^cont_dig a cada digito para saber la suma
for(int j=1;j<=cont_dig;j++){
digit=numaux2%10;
numaux2=numaux2/10;
suma+=pow(digit,cont_dig);
}
/*Si la suma y el num es igual es un numero narcisista asi que se le muestra al usuario
y ademas se le suma 1 a i entendiendo que se encontró un numero narcisista*/
if(suma==num){
cout<<num<<"\t";
i++;
}
/*Se suma 1 al numero para que siga aumentado ej: (1,2,3,4,5,...) asi se recorren los números
hasta que se tengan los narcisistas pedidos*/
num++;
}
cout<<endl<<endl;
system("PAUSE");
return 0;
}
No hay comentarios:
Publicar un comentario