Calcular a Soma de Cada Dígito Elevado à Potência do Número de Dígitos
Neste passo, modificaremos o nosso programa anterior para calcular a soma de cada dígito elevado à potência do número total de dígitos.
Abra o ficheiro armstrong.c:
cd ~/project
nano armstrong.c
Atualize o código para calcular a soma dos dígitos:
#include <stdio.h>
#include <math.h>
int main() {
int number, originalNumber, remainder, digitCount = 0;
long long digitSum = 0;
// Solicita ao utilizador que introduza um número
printf("Introduza um número para verificar se é um número de Armstrong: ");
scanf("%d", &number);
// Armazena o número original para comparação posterior
originalNumber = number;
// Conta o número de dígitos
while (number != 0) {
number /= 10;
digitCount++;
}
// Reinicia o número para o valor original
number = originalNumber;
// Calcula a soma de cada dígito elevado à potência do número de dígitos
while (number != 0) {
remainder = number % 10;
digitSum += pow(remainder, digitCount);
number /= 10;
}
// Imprime os resultados
printf("Número de dígitos: %d\n", digitCount);
printf("Soma dos dígitos elevados à potência: %lld\n", digitSum);
return 0;
}
Compile o programa com a biblioteca matemática:
gcc armstrong.c -o armstrong -lm
./armstrong
Exemplo de saída:
Introduza um número para verificar se é um número de Armstrong: 153
Número de dígitos: 3
Soma dos dígitos elevados à potência: 153
Conceitos-chave explicados:
digitCount acompanha o número de dígitos
pow(remainder, digitCount) eleva cada dígito à potência do número total de dígitos
number % 10 extrai o último dígito
number /= 10 remove o último dígito em cada iteração
long long usado para lidar com somas de dígitos potencialmente grandes