Número narcisista en C++

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
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++
    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++
Salida de la función para comprobar si número es narcisista en C++

Así es como terminamos.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

2 comentarios en “Número narcisista en C++”

  1. Pingback: Solución a algoritmo para determinar número narcisista en muchos lenguajes - Parzibyte's blog

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *