Programa C para verificar el número de Armstrong

Dado un número x , determine si el número dado es el número de Armstrong o no. 

Un entero positivo de n dígitos se denomina número de Armstrong de orden n (el orden es el número de dígitos) si. 

abcd… = pow(a,n) + pow(b,n) + pow(c,n) + pow(d,n) + …. 

Ejemplo: 

Entrada: 153

Salida:

153 es un número de Armstrong.

1*1*1 + 5*5*5 + 3*3*3 = 153

Entrada: 120

Salida:

120 no es un número de Armstrong.

1*1*1 + 2*2*2 + 0*0*0 = 9

Entrada: 1253

Salida:

1253 no es un número de Armstrong

1*1*1*1 + 2*2*2*2 + 5*5*5*5 + 3*3*3*3 = 723

Entrada: 1634

Salida:

1*1*1*1 + 6*6*6*6 + 3*3*3*3 + 4*4*4*4 = 1634

Enfoque: La idea es primero contar los dígitos de los números (o encontrar el orden). Sea n el número de dígitos. Para cada dígito r en el número de entrada x, calcule r n . Si la suma de todos estos valores es igual a n, devuelve verdadero, de lo contrario, falso.

C

// C program to find Armstrong number
#include <stdio.h>
 
// Function to calculate x
// raised to the power y
int power(int x, unsigned int y)
{
    if (y == 0)
        return 1;
    if (y % 2 == 0)
        return (power(x, y / 2) *
                power(x, y / 2));
    return (x * power(x, y / 2) *
                power(x, y / 2));
}
 
// Function to calculate
// order of the number
int order(int x)
{
    int n = 0;
    while (x)
    {
        n++;
        x = x / 10;
    }
    return n;
}
 
// Function to check whether the
// given number is Armstrong
// number or not
int isArmstrong(int x)
{
    // Calling order function
    int n = order(x);
    int temp = x, sum = 0;
    while (temp) {
        int r = temp % 10;
        sum += power(r, n);
        temp = temp / 10;
    }
 
    // If satisfies Armstrong condition
    if (sum == x)
        return 1;
    else
        return 0;
}
 
// Driver Program
int main()
{
    int x = 153;
    if (isArmstrong(x) == 1)
        printf("True\n");
    else
        printf("False\n");
 
    x = 1253;
    if (isArmstrong(x) == 1)
        printf("True\n");
    else
        printf("False\n");
 
    return 0;
}
Producción:

true
false

Complejidad del tiempo: O(logx*log(logx))

Espacio Auxiliar: O(1)

El enfoque anterior también se puede implementar de una manera más corta como:

C

// C program to implement
// the above approach
#include <stdio.h>
 
// Driver code
int main()
{
        int n = 153;
        int temp = n;
        int p = 0;
 
        // Function to calculate
        // the sum of individual digits
        while (n > 0)
        {
            int rem = n % 10;
            p = (p) + (rem * rem * rem);
            n = n / 10;
        }
 
        // Condition to check whether the
        // value of P equals to user input
        // or not.
        if (temp == p)
        {
            printf("Yes. It is Armstrong No.");
        }
        else
        {
            printf("No. It is not an Armstrong No.");
        }
    return 0;
}
 
// This code is contributed by sathiyamoorthics19
Producción:

Yes. It is Armstrong No.

Complejidad de tiempo: O (logn)

Espacio Auxiliar: O(1)

¡ Consulte el artículo completo sobre Programa para números de Armstrong para obtener más detalles!

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *