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.
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;
}
#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;
}
#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
#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;
}
#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.
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.