C++ program to find the amstrong numbers between interval has been shown here. A positive integer of order n is called an amstrong number if the sum of each digit to the power n is equal to that number. For example, 8 and 370 are amstrong numbers as $8 = 8^1$ and $370 = 3^3 + 7^3 + 0^3$.

The amstrong numbers between 1 and 500 are 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407.

The algorithm, pseudocode and time complexity of the program have been shown below.

## 1. Algorithm to find amstrong numbers between interval

1. Take lower limit l and upper limit u as inputs.

2. For each number n between l and u

3. Calculate d, the total no of digit of n

4. Extract each digit $p_i$ and perform sum = $\sum_{i=1}^d p_i ^d$

5. Check If sum = n

6. If step 5 is true, then display n as an amstrong number

7. Go to step 2 to check next number

## 2. Pseudocode to find amstrong numbers between interval

Input : Lower bound $l$ and Upper bound $u$

Output : Amstrong numbers between $l$ and $u$

1. Procedure findAmstrong($l, u$):

2. Repeat for $n \in [l, u]$:

3. $t \leftarrow n$

4. $sum \leftarrow 0$

5. Count $d$, the total no of digits in $n$

6. Repeat until $t != 0$

7. $r \leftarrow t \mod 10$

8. $sum \leftarrow sum + r^d$

9. $t \leftarrow t / 10$

10.If $sum \mod n$ = 0:

11.Print "$n$ is an Amstrong number"

12. End Procedure

## 3. Time complexity to find amstrong numbers between interval

Time Complexity: O(nlog(k))

Where n is the total no. of integers between lower and upper bound and k is the average length of the integers.

## 4. C++ Program & output to find amstrong numbers between interval

Code has been copied
/****************************
alphabetacoder.com
C++ program to find amstrong
numbers between interval
*****************************/

#include <iostream>
#include <cmath>

using namespace std;

int main() {
// declare variables
int u, l, n, d = 0, t, r, sum = 0;

// take input of lower and upper bound
cout << "Enter the lower bound = ";
cin >> l;
cout << "Enter the upper bound = ";
cin >> u;

cout << "Amstrong numbers between " << l << " and " << u << ": ";
// check each number from l to u
for (n = l; n <= u; n++) {
// initialize
t = n;
d = 0;
sum = 0;
// calculate the number of digit
while (t != 0) {
d++;
t = t / 10;
}

// copy value
t = n;
// find the sum of digits each to the power d
while (t != 0) {
r = t % 10;
sum = sum + pow(r, d);
t = t / 10;
}

//check if input number is amstrong or not
if (n == sum)
cout << n << " ";
}

return 0;
}


Output

Enter the lower bound = 1

Enter the upper bound = 1000

Amstrong numbers between 1 and 1000: 1 2 3 4 5 6 7 8 9 153 370 371 407