Armstrong Number Program in C

An Armstrong number (also called a narcissistic number) is a non-negative integer equal to the sum of its digits, each raised to the power of the number of digits. For a three-digit number, each digit is cubed.

Integer Power Helper Top ↑

Because this is an integer problem, using a small integer-power function avoids floating-point rounding from pow().

unsigned long long integer_power(unsigned int base, int exponent) {
    unsigned long long result = 1;

    for (int i = 0; i < exponent; i++) {
        result *= base;
    }

    return result;
}

Check a Three-Digit Armstrong Number Top ↑

#include <stdio.h>

int main(void) {
    int number = 153;
    int value = number;
    int sum = 0;

    while (value != 0) {
        int digit = value % 10;
        sum += digit * digit * digit;
        value /= 10;
    }

    printf("%d %s an Armstrong number.\n",
           number,
           number == sum ? "is" : "is not");

    return 0;
}

Display All Three-Digit Armstrong Numbers Top ↑

#include <stdio.h>

int main(void) {
    for (int number = 100; number <= 999; number++) {
        int value = number;
        int sum = 0;

        while (value != 0) {
            int digit = value % 10;
            sum += digit * digit * digit;
            value /= 10;
        }

        if (number == sum) {
            printf("%d\n", number);
        }
    }

    return 0;
}

Output

153
370
371
407

Check an Armstrong Number with Any Number of Digits Top ↑

#include <stdio.h>

int count_digits(unsigned int number) {
    int count = 0;

    do {
        count++;
        number /= 10;
    } while (number != 0);

    return count;
}

unsigned long long integer_power(unsigned int base, int exponent) {
    unsigned long long result = 1;

    for (int i = 0; i < exponent; i++) {
        result *= base;
    }

    return result;
}

int is_armstrong(unsigned int number) {
    unsigned int value = number;
    int digits = count_digits(number);
    unsigned long long sum = 0;

    do {
        unsigned int digit = value % 10;
        sum += integer_power(digit, digits);
        value /= 10;
    } while (value != 0);

    return sum == number;
}

int main(void) {
    unsigned int number;

    printf("Enter a non-negative integer: ");
    if (scanf("%u", &number) != 1) {
        printf("Invalid input.\n");
        return 1;
    }

    printf("%u %s an Armstrong number.\n",
           number,
           is_armstrong(number) ? "is" : "is not");

    return 0;
}

Armstrong Numbers Below 10,000 Top ↑

#include <stdio.h>

int count_digits(unsigned int number) {
    int count = 0;

    do {
        count++;
        number /= 10;
    } while (number != 0);

    return count;
}

unsigned long long integer_power(unsigned int base, int exponent) {
    unsigned long long result = 1;

    for (int i = 0; i < exponent; i++) {
        result *= base;
    }

    return result;
}

int is_armstrong(unsigned int number) {
    unsigned int value = number;
    int digits = count_digits(number);
    unsigned long long sum = 0;

    do {
        unsigned int digit = value % 10;
        sum += integer_power(digit, digits);
        value /= 10;
    } while (value != 0);

    return sum == number;
}

int main(void) {
    for (unsigned int number = 0; number < 10000; number++) {
        if (is_armstrong(number)) {
            printf("%u\n", number);
        }
    }

    return 0;
}

The list includes the single-digit Armstrong numbers as well as 153, 370, 371, 407, 1634, 8208 and 9474.

Related: count digits and sum digits.





plus2net.com






✖
We use cookies to improve your browsing experience. . Learn more
HTML MySQL PHP JavaScript ASP Photoshop Articles Contact us
© 2000-2026 plus2net.com All rights reserved worldwide Privacy Policy Disclaimer