C program to print strong numbers between 1 to n

Write a C program to print Strong numbers between 1 to n. C program to print all strong numbers between a given range. Logic to print strong numbers in a given range in C program.

Example

Input

Input upper limit: 1000

Output

Strong numbers between 1-1000: 
1, 2, 145

Required knowledge

Basic C programming, If satement, For loop, Nested loop

Must know –

What is a Strong number?

Strong number is a special number whose sum of factorial of digits is equal to the original number. For example: 145 is strong number. Since, 1! + 4! + 5! = 145

Logic to print Strong numbers between 1 to n

Step by step descriptive logic to print strong numbers from 1 to n.

  1. Input upper limit to print strong number from user. Store it in a variable say end.
  2. Run a loop from 1 to end, increment 1 in each iteration. Structure of the loop should be similar to for(i=1; i<=end; i++).
  3. For each iteration inside loop check i for strong number. Print the value of i if it is a strong number.

Let us convert the above logic to a C program.

Program to print strong numbers between 1 to n

/**
 * C program to print all Strong Numbers between 1 to n
 */

#include <stdio.h>

int main()
{
    int i, j, cur, lastDigit, end;
    long long fact, sum;

    /* Input upper limit from user */
    printf("Enter upper limit: ");
    scanf("%d", &end);

    printf("All Strong numbers between 1 to %d are:\n", end);
    
    /* Iterate from 1 to end */
    for(i=1; i<=end; i++)
    {
        /* Number to check for strong number */
        cur = i;

        sum = 0;

        /* Find the sum of factorial of digits */ 
        while(cur > 0)
        {
            fact = 1ll;
            lastDigit = cur % 10;

            /* Find factorial of last digit of current num. */
            for( j=1; j<=lastDigit; j++)
            {
                fact = fact * j;
            }

            sum += fact; 

            cur /= 10;
        }
        
        /* Print 'i' if it is strong number */  
        if(sum == i)
        {
            printf("%d, ", i);
        }
    }

    return 0;
}

Once, you got the logic of printing strong numbers between 1 to n. You can easily modify the logic to find strong numbers in any given range. Below program illustrates how to print strong numbers in a given range.

Program to print strong numbers in given range

/**
 * C program to print Strong numbers in given range
 */

#include <stdio.h>

int main()
{
    int i, j, cur, lastDigit, start, end;
    long long fact, sum;

    /* Input lower and upper limit from user */
    printf("Enter lower limit: ");
    scanf("%d", &start);
    printf("Enter upper limit: ");
    scanf("%d", &end);

    printf("All Strong numbers between %d to %d are:\n", start, end);
    
    /* Iterate from 1 to end */
    for(i=start; i<=end; i++)
    {
        /* Number to check for strong number */
        cur = i;

        sum = 0;

        /* Find the sum of factorial of digits */ 
        while(cur > 0)
        {
            fact = 1ll;
            lastDigit = cur % 10;

            /* Find factorial of last digit of current num. */
            for( j=1; j<=lastDigit; j++)
            {
                fact = fact * j;
            }

            sum += fact; 

            cur /= 10;
        }
        
        /* Print 'i' if it is strong number */  
        if(sum == i)
        {
            printf("%d, ", i);
        }
    }

    return 0;
}

Output

Enter lower limit: 1
Enter upper limit: 100000
1, 2, 145, 40585,

Happy coding 😉