Introdução
Neste laboratório, aprenderemos a verificar se um número dado é um número de Armstrong usando um programa em C. Primeiro, leremos uma entrada inteira do utilizador, depois calculamos a soma de cada dígito elevado à potência do número total de dígitos e, finalmente, imprimiremos se o número é ou não um número de Armstrong.
O programa guiará o utilizador através do processo passo a passo, desde a leitura da entrada até à determinação se o número é um número de Armstrong.
Ler um Inteiro
Neste passo, aprenderemos a ler uma entrada inteira do utilizador num programa C para verificar se é um número de Armstrong.
Primeiro, criemos um novo ficheiro C no diretório do projeto:
cd ~/project
nano armstrong.c
Agora, escrevamos o código inicial para ler um inteiro:
#include <stdio.h>
int main() {
int number;
// Solicita ao utilizador que introduza um número
printf("Introduza um número para verificar se é um número de Armstrong: ");
// Lê a entrada inteira
scanf("%d", &number);
// Imprime o número introduzido para verificar a entrada
printf("Introduziu: %d\n", number);
return 0;
}
Compile e execute o programa:
gcc armstrong.c -o armstrong
./armstrong
Exemplo de saída:
Introduza um número para verificar se é um número de Armstrong: 153
Introduziu: 153
Vamos analisar o código:
scanf("%d", &number)lê um inteiro da entrada do utilizador&numberpassa o endereço de memória da variávelnumberprintf()é usado para solicitar ao utilizador e exibir o número introduzido
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:
digitCountacompanha o número de dígitospow(remainder, digitCount)eleva cada dígito à potência do número total de dígitosnumber % 10extrai o último dígitonumber /= 10remove o último dígito em cada iteraçãolong longusado para lidar com somas de dígitos potencialmente grandes
Imprimir se é ou não um Número de Armstrong
Neste passo, completaremos o nosso verificador de números de Armstrong comparando o número original com a soma dos dígitos calculada.
Abra o ficheiro armstrong.c:
cd ~/project
nano armstrong.c
Atualize o código para determinar e imprimir se o número é um número de Armstrong:
#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;
}
// Verifica se o número é um número de Armstrong
if (digitSum == originalNumber) {
printf("%d é um número de Armstrong.\n", originalNumber);
} else {
printf("%d não é um número de Armstrong.\n", originalNumber);
}
return 0;
}
Compile o programa:
gcc armstrong.c -o armstrong -lm
./armstrong
Exemplos de saída:
Introduza um número para verificar se é um número de Armstrong: 153
153 é um número de Armstrong.
Introduza um número para verificar se é um número de Armstrong: 154
154 não é um número de Armstrong.
Conceitos-chave explicados:
- Compara
digitSumcom ooriginalNumber - Se forem iguais, é um número de Armstrong
- O programa lida com diferentes cenários de entrada
Resumo
Neste laboratório, aprenderá a ler um inteiro introduzido pelo utilizador, calcular a soma de cada dígito elevado à potência do número total de dígitos e determinar se o número é um número de Armstrong. O primeiro passo envolve solicitar ao utilizador que introduza um número e armazená-lo numa variável. O segundo passo centra-se no cálculo da soma de cada dígito elevado à potência do número total de dígitos, que é então comparada com o número original para verificar se é um número de Armstrong.



