An Armstrong number (also called a narcissistic number) equals the sum of its digits, each raised to the power of the digit count.
Remember
n is Armstrong ↔ n = sum of (each digit ^ k)
where k = number of digits in n
Example: 153 (k = 3)
1³ + 5³ + 3³ = 1 + 125 + 27 = 153
Also: 1–9 (one digit), 370, 371, 407
n
Digit powers
Result
153
1³+5³+3³ = 153
Armstrong
370
3³+7³+0³ = 370
Armstrong
123
1³+2³+3³ = 36
Not Armstrong
5
5¹ = 5
Armstrong
Approach
How to Check an Armstrong Number in C++
Four clear steps — count digits first, then sum powers with that same exponent.
Reject n <= 0 for this page’s positive-integer rule.
Count digits into k (repeatedly divide by 10).
Peel each digit with % 10 and add digit^k.
Compare the sum with the original number.
Method
Idea
Time
Best for
Digit loop + iPow
Count k, then sum d^k
O(log n)
Interviews, default
String digits
to_string, then power each char
O(log n)
Readable C++ variant
Range scan
Reuse the helper
O(N log N)
Listing Armstrong numbers
Pseudocode
Pseudocode
function IsArmstrong(n):
if n <= 0:
return false
k = digitCount(n)
sum = 0
t = n
while t > 0:
d = t mod 10
sum = sum + (d ^ k)
t = t / 10
return sum == n
Reference
Cheat Sheet
Keep these facts handy while writing the program.
Topic
Detail
Test
sum(digit^k) == n, k = digits
Peel digit
d = n % 10, then n /= 10
Powers
Use integer iPow, not std::pow
1 digit
1–9 are Armstrong
3 digits
153, 370, 371, 407
1..200
1–9 and 153
Try it
Live Preview
Enter a positive integer to see each digit power and the Armstrong verdict.
Positive whole numbers. Tap a chip or type a value.
Start with a single check using integer powers. Then list a range, and finish with a readable string-based digit walk.
Example 1 — Check One Number
Count digits, sum iPow(d, k) for each digit, then compare with the original value.
C++
#include <iostream>
int iPow(int baseVal, int exp) {
int result = 1;
for (int i = 0; i < exp; i++) {
result *= baseVal;
}
return result;
}
bool isArmstrong(int n) {
if (n <= 0) {
return false;
}
int power = 0;
for (int t = n; t > 0; t /= 10) {
power++;
}
int total = 0;
int temp = n;
while (temp > 0) {
int digit = temp % 10;
total += iPow(digit, power);
temp /= 10;
}
return total == n;
}
int main() {
int number = 153;
if (isArmstrong(number)) {
std::cout << number << " is an Armstrong number.\n";
} else {
std::cout << number << " is not an Armstrong number.\n";
}
return 0;
}
Output
153 is an Armstrong number.
How It Works
Return false for non-positive inputs.
Count digits into power with a working copy.
Peel digits via temp and add iPow(digit, power) each time.
Compare total with the original n.
iPow stays in integer math — no floating std::pow.
Example 2 — Armstrong Numbers from 1 to 200
Reuse the helper and print every match in a closed range.
C++
#include <iostream>
int iPow(int baseVal, int exp) {
int result = 1;
for (int i = 0; i < exp; i++) {
result *= baseVal;
}
return result;
}
bool isArmstrong(int n) {
if (n <= 0) {
return false;
}
int power = 0;
for (int t = n; t > 0; t /= 10) {
power++;
}
int total = 0;
int temp = n;
while (temp > 0) {
int digit = temp % 10;
total += iPow(digit, power);
temp /= 10;
}
return total == n;
}
int main() {
int start = 1;
int end = 200;
std::cout << "Armstrong numbers in the range " << start
<< " to " << end << ":\n";
for (int value = start; value <= end; value++) {
if (isArmstrong(value)) {
std::cout << value << " ";
}
}
std::cout << "\n";
return 0;
}
Output
Armstrong numbers in the range 1 to 200:
1 2 3 4 5 6 7 8 9 153
How It Works
Loop from start to end inclusive.
Call isArmstrong(value) for each value.
Single-digit numbers print first (each is Armstrong).
153 is the only other hit in 1…200.
The helper stays pure; the loop only decides what to print.
Example 3 — String-Based Digit Walk
Convert to a string, raise each character digit to power s.size(), and compare.
C++
#include <iostream>
#include <string>
int iPow(int baseVal, int exp) {
int result = 1;
for (int i = 0; i < exp; i++) {
result *= baseVal;
}
return result;
}
bool isArmstrong(int n) {
if (n <= 0) {
return false;
}
std::string s = std::to_string(n);
int power = (int) s.size();
int total = 0;
for (size_t i = 0; i < s.size(); i++) {
int digit = s[i] - '0';
total += iPow(digit, power);
}
return total == n;
}
int main() {
std::cout << (isArmstrong(153) ? "true" : "false") << "\n";
std::cout << (isArmstrong(123) ? "true" : "false") << "\n";
return 0;
}
Output
true
false
How It Works
Convert n with std::to_string so digit count is s.size().
Walk each character and convert with s[i] - '0'.
Add iPow(digit, power) for every digit.
153 prints true; 123 prints false.
Readable C++ style; interviews often still prefer the arithmetic peel.
Edge Cases & Pitfalls
Check these before calling the solution done.
Exponent
Use digit count k
Do not hard-code cubes unless the problem is only about 3-digit numbers.
std::pow
Prefer integer powers
Floating pow can round wrong. Use a small integer iPow helper.
Zero
Definitions vary
This page returns false for n <= 0. Follow the problem statement if it includes 0.
Overflow
Use a wider sum
For large n, accumulate with long long so digit powers do not wrap.
Analysis
Time and Space Complexity
Program
Time
Extra space
Single check
O(log n)
O(1)
Range of size N
O(N log N)
O(1)
String digit walk
O(log n)
O(log n) for the string
Digit count d is about log₁₀ n. Each power costs O(d) with a simple loop, still fine for interviews.
Remember
Key Takeaways
Definition: sum of each digit raised to the digit count equals n.
Classic: 153 = 1³ + 5³ + 3³.
Powers: use integer iPow; avoid floating std::pow.
Test set: 153, 370, 9 yes; 123 no.
One line: raise every digit to the digit count — if the sum equals n, it is Armstrong.
Frequently Asked Questions
A positive integer n is Armstrong (narcissistic) if it equals the sum of its digits, each raised to the power of the digit count. Example: 153 has 3 digits and 1³ + 5³ + 3³ = 153.
Yes. For a one-digit n, the count is 1 and n¹ = n. This page treats n <= 0 as not Armstrong.
Floating-point pow can round incorrectly. Integer exponentiation stays exact for typical interview sizes.
The same k for every digit, where k is the number of digits in n. Do not hard-code cubes unless you only care about 3-digit cases.
Counting digits and summing powers are both O(d), and d is about log₁₀ n, so one check is O(log n).