Verificar se um Número é um Número de Armstrong em C

CBeginner
Pratique Agora

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
  • &number passa o endereço de memória da variável number
  • printf() é 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:

  • 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

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 digitSum com o originalNumber
  • 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.