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 <stdio.h>
#include <math.h>

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

// take input of lower and upper bound
printf("Enter the lower bound = ");
scanf("%d", & l);
printf("Enter the upper bound = ");
scanf("%d", & u);

printf("Amstrong numbers between %d and %d: ", l, 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)
printf("%d ", n);
}

return 0;
}


Output

Case 1:

Enter the lower bound = 1

Enter the upper bound = 100

Amstrong numbers between 1 and 100: 1 2 3 4 5 6 7 8 9

Case 2:

Enter the lower bound = 100

Enter the upper bound = 100000

Amstrong numbers between 100 and 10000: 153 370 371 407 1634 8208 9474