Calcular la Suma de Cada Dígito Elevado a la Potencia del Número de Dígitos
En este paso, modificaremos nuestro programa anterior para calcular la suma de cada dígito elevado a la potencia del número total de dígitos.
Abre el archivo armstrong.c:
cd ~/project
nano armstrong.c
Actualiza el código para calcular la suma de los dígitos:
#include <stdio.h>
#include <math.h>
int main() {
int number, originalNumber, remainder, digitCount = 0;
long long digitSum = 0;
// Solicita al usuario que introduzca un número
printf("Introduce un número para comprobar si es un número de Armstrong: ");
scanf("%d", &number);
// Almacena el número original para comparaciones posteriores
originalNumber = number;
// Cuenta el número de dígitos
while (number != 0) {
number /= 10;
digitCount++;
}
// Restablece el número al valor original
number = originalNumber;
// Calcula la suma de cada dígito elevado a la potencia del número de dígitos
while (number != 0) {
remainder = number % 10;
digitSum += pow(remainder, digitCount);
number /= 10;
}
// Imprime los resultados
printf("Número de dígitos: %d\n", digitCount);
printf("Suma de los dígitos elevados a la potencia: %lld\n", digitSum);
return 0;
}
Compila el programa con la biblioteca matemática:
gcc armstrong.c -o armstrong -lm
./armstrong
Salida de ejemplo:
Introduce un número para comprobar si es un número de Armstrong: 153
Número de dígitos: 3
Suma de los dígitos elevados a la potencia: 153
Conceptos clave explicados:
digitCount cuenta el número de dígitos.
pow(remainder, digitCount) eleva cada dígito a la potencia del número total de dígitos.
number % 10 extrae el último dígito.
number /= 10 elimina el último dígito en cada iteración.
long long se utiliza para manejar sumas de dígitos potencialmente grandes.