Introducción

Comenzaremos resolviendo el algoritmo para determinar si un número es narcisista en CPP o C++. Escribiremos una función que recibe un entero y regresa un booleano indicando si el número recibido es narcisista.

Narcisista en CPP

 

Nota: si quieres saber qué es un número narcisista, así como el algoritmo para determinarlo lee: Solución al algoritmo de número narcisista en muchos lenguajes de programación.

Número narcisista en C++

La función que dije queda escrita así:

bool esNarcisista(int numero){
	// Nota: to_string pertenece a std, la llamada normal sería std::to_string
	string numeroComoCadena = to_string(numero);
	double longitudDelNumero = numeroComoCadena.size();

	double suma = 0;
	// Recorrer cadena, carácter por carácter
	for(int indice = 0; indice < longitudDelNumero; indice++){

		//Convertir el carácter a entero
		double cifraActual = numeroComoCadena[indice] - '0';

		// Elevarlo a la potencia dada por la longitud
		double elevado = pow(cifraActual, longitudDelNumero);

		// Sumar el resultado a suma
		suma = suma + elevado;
	}
	
	// Si la suma y el número recibido son iguales, es narcisista
	if(suma == numero){
		return true;
	}else{
		return false;
	}
}

Hay algunas cosas importantes que notar. Por ejemplo, para convertir el número a cadena usamos std::to_string.

Más tarde recorremos el número como si fuera una cadena, y vamos tomando carácter por carácter. Ese carácter es de tipo char, lo convertimos a entero y luego lo elevamos a la potencia N.

¿Y cuál es la potencia N? bueno, N es la longitud del número; es decir, el número de cifras que tiene.

Para elevarlo usamos la función pow en CPP.

Ejemplo completo

Para ver cómo podemos llamar a la función desde un programa normal escrito en C++ implementamos este código:

/*
    Determinar si un número es narcisista usando C++
    https://parzibyte.me/blog/
*/
#include <iostream>
#include <math.h>

using namespace std;

// Prototipo
bool esNarcisista(int numero);

int main(){
	// Algunos números para probar
	int numeros[] = {1, 2, 3, 4, 153, 28, 11, 96, 407, 1634, 54748};
	for(int x = 0; x < sizeof(numeros) / sizeof(numeros[0]); x++){
		printf("%d es narcisista? %s\n", numeros[x], esNarcisista(numeros[x]) ? "true": "false");
	}
}
// función
bool esNarcisista(int numero){
	// Nota: to_string pertenece a std, la llamada normal sería std::to_string
	string numeroComoCadena = to_string(numero);
	double longitudDelNumero = numeroComoCadena.size();

	double suma = 0;
	// Recorrer cadena, carácter por carácter
	for(int indice = 0; indice < longitudDelNumero; indice++){

		//Convertir el carácter a entero
		double cifraActual = numeroComoCadena[indice] - '0';

		// Elevarlo a la potencia dada por la longitud
		double elevado = pow(cifraActual, longitudDelNumero);

		// Sumar el resultado a suma
		suma = suma + elevado;
	}
	
	// Si la suma y el número recibido son iguales, es narcisista
	if(suma == numero){
		return true;
	}else{
		return false;
	}
}

Lo que hacemos es definir un arreglo de enteros, recorrerlo e imprimir si son narcisistas o no. La salida es la siguiente, aunque recuerda que puedes compilarlo y probarlo por ti mismo.

Salida de la función para comprobar si número es narcisista en C++

Así es como terminamos.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto