C Program to Find Amstrong Numbers Between Interval

Amstrong number

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