Comprobar si un Número es un Número de Armstrong en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a comprobar si un número dado es un número de Armstrong utilizando un programa en C. Primero, leeremos un entero como entrada del usuario, luego calcularemos la suma de cada dígito elevado a la potencia del número total de dígitos y, finalmente, imprimiremos si el número es un número de Armstrong o no.

El programa guiará al usuario a través del proceso paso a paso, desde la lectura de la entrada hasta la determinación de si el número es un número de Armstrong.

Leer un Entero

En este paso, aprenderemos a leer una entrada de entero del usuario en un programa C para comprobar si es un número de Armstrong.

Primero, creemos un nuevo archivo C en el directorio del proyecto:

cd ~/project
nano armstrong.c

Ahora, escribamos el código inicial para leer un entero:

#include <stdio.h>

int main() {
    int number;

    // Solicita al usuario que introduzca un número
    printf("Introduce un número para comprobar si es un número de Armstrong: ");

    // Lee la entrada de entero
    scanf("%d", &number);

    // Imprime el número introducido para verificar la entrada
    printf("Has introducido: %d\n", number);

    return 0;
}

Compila y ejecuta el programa:

gcc armstrong.c -o armstrong
./armstrong

Salida de ejemplo:

Introduce un número para comprobar si es un número de Armstrong: 153
Has introducido: 153

Desglose del código:

  • scanf("%d", &number) lee un entero de la entrada del usuario.
  • &number pasa la dirección de memoria de la variable number.
  • printf() se utiliza para solicitar al usuario e imprimir el número introducido.

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.

Imprimir si es o no un Número de Armstrong

En este paso, completaremos nuestro comprobador de números de Armstrong comparando el número original con la suma de dígitos calculada.

Abre el archivo armstrong.c:

cd ~/project
nano armstrong.c

Actualiza el código para determinar e imprimir si el número es un número de Armstrong:

#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;
    }

    // Comprueba si el número es un número de Armstrong
    if (digitSum == originalNumber) {
        printf("%d es un número de Armstrong.\n", originalNumber);
    } else {
        printf("%d no es un número de Armstrong.\n", originalNumber);
    }

    return 0;
}

Compila el programa:

gcc armstrong.c -o armstrong -lm
./armstrong

Ejemplos de salida:

Introduce un número para comprobar si es un número de Armstrong: 153
153 es un número de Armstrong.

Introduce un número para comprobar si es un número de Armstrong: 154
154 no es un número de Armstrong.

Conceptos clave explicados:

  • Compara digitSum con originalNumber.
  • Si son iguales, es un número de Armstrong.
  • El programa maneja diferentes escenarios de entrada.

Resumen

En este laboratorio, aprenderás a leer un entero introducido por el usuario, calcular la suma de cada dígito elevado a la potencia del número total de dígitos y determinar si el número es un número de Armstrong. El primer paso implica solicitar al usuario que introduzca un número y almacenarlo en una variable. El segundo paso se centra en calcular la suma de cada dígito elevado a la potencia del número total de dígitos, que luego se compara con el número original para comprobar si es un número de Armstrong.