Después de algún tiempo de haber publicado el algoritmo para saber si un número es narcisista en varios lenguajes de programación es hora de implementarlo en el lenguaje C.

No podemos usar el código de C++ porque C++ no es compatible con C; aunque al revés sí se puede. Es decir, podemos usar código de C en CPP pero no podemos usar código de CPP en C.

Narcisista en C

En fin, veremos cómo implementar el algoritmo para determinar si un número es narcisista en C.

Saber si un número es narcisista en ANSI C

El algoritmo es el mismo aplicado para todas las demás implementaciones… convertimos el número a cadena, lo recorremos cifra por cifra y vamos elevando cada número. Hay algunas lecturas que te ayudarán a entender mejor todo el algoritmo:

Convertir número a cadena en C

Char a int en C

Booleanos en C

Elevar número a potencia en C

Por cierto, para sacar la longitud de un número pero sin convertirlo a cadena se utiliza el logaritmo en base 10 y luego se redondea hacia abajo; no me preguntes cómo funciona porque no sé, pero te da la longitud del número. Esto no interfiere con el algoritmo, porque al final el fin justifica los medios.

Una vez explicado un poco, vamos allá.

Función para saber si un entero es narcisista en C

Aquí está sin más vueltas:

int esNarcisista(int numero) {
  // Obtener longitud sin convertir a cadena
  int longitudDelNumero = floor(log10(numero)) + 1;
  // Búfer para alojar cadena
  char numeroComoCadena[longitudDelNumero + 1];
  // Convertir número a cadena
  sprintf(numeroComoCadena, "%d", numero);
 
  int suma = 0;
  // Recorrer cadena, carácter por carácter
  for (int indice = 0; indice < longitudDelNumero; indice++) {
    // Convertir el carácter a entero
    int cifraActual = numeroComoCadena[indice] - '0';
 
    // Elevarlo a la potencia dada por la longitud
    int 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 1;
  } else {
    return 0;
  }
}

La función recibe un número y devuelve un “booleano” si le queremos llamar así. Es decir, un 1 en caso de que el número sea narcisista y un 0 en caso de que no.

Esta función para saber si un número es narcisista en C utiliza algunas funciones matemáticas; por otro lado, la conversión de entero a cadena también necesita unas funciones. Por ello, debemos incluir stdio.h y math.h.

Para llamar a la función aquí dejo un ejemplo:

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");
  }
}

Recorremos un arreglo de números y en cada iteración comprobamos si es narcisista o no; imprimiendo los resultados por pantalla.

Y listo, así de simple es. Igualmente se pueden cambiar los tipos de variables para poder trabajar con números más grandes, pero depende del problema que enfrentemos.

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

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.