In this blog post, we learn how to write a C program to check whether a number is strong number or not?. We will write the C program to find a strong Number. How to check strong numbers using loop in C programming. Logic to check strong number in C programming.
Example,
Input: 145 Output: Yes it is a strong number Explanation: 1! + 4! + 5! = 145 Input: 124 Output: No it is not a strong number Explanation: 1! + 2! + 4! = 27 which is not equal to n i.e, 124
What is a strong number?
A strong number is a special number whose sum of the factorial of digits is equal to the original number. For example, 145 is a strong number. Since, 1! + 4! + 5! = 145
Logic to check strong number:
- Ask the user to enter any number and create a copy of the entered number in tmpNum.
- Declare and initialize another variable sum with 0, where the sum is an integer variable.
- Get the last digit of the given number by performing the modulo division (%) and store the value in last_digit variable, likey last_digit= number % 10.
- Find factorial of last_digit and store factorial in a variable says fact.
- Add factorial to sum i.e. sum = sum + fact.
- Remove last digit by dividing the number by 10 i.e. num = num / 10.
- Repeat steps 3-6 until the number becomes 0.
- Now, after the loop check condition for a strong number. If (sum == tmpNum,) then the given number is a strong number otherwise not.
C program to check whether a number is strong number or not:
The below program ask the user to enter the value. After getting the value from the user it will check whether the given number is a strong number or not by using the above-mentioned logic.
#include <stdio.h> int main() { int i, tmpNum, num, last_digit, sum =0; long fact; //Get input a number from user printf("Enter any number: "); scanf("%d", &num); //Copy the value of num to a temporary variable tmpNum = num; //Find sum of factorial of digits while(num > 0) { //Get last digit of num last_digit = num % 10; //Find factorial of last digit fact = 1; for(i=1; i<=last_digit; i++) { fact = fact * i; } //Add factorial to sum sum = sum + fact; num = num / 10; } //Check Strong number condition if(sum == tmpNum) { printf("%d is strong number", tmpNum); } else { printf("%d is not strong number", tmpNum); } return 0; }
Output:
Enter any number: 145
145 is strong number
C program to check a strong number by optimizing way:
Below, I am writing an optimized way to find a strong number. I am also mentioning some steps for the same which help you to understand the code,
Steps to find the strong number:
- Compute the factorial of 0 -9 numbers and store in an array.
- Now ask the user to enter any number and create a copy of the entered number in tmpNum.
- Declare and initialize another variable sum with 0, where the sum is an integer variable.
- Get the last digit of the given number by performing the modulo division (%) and store the value in last_digit variable, likey last_digit= number % 10.
- Find factorial of last_digit using the pre-compute array.
- Add factorial to sum i.e. sum = sum + fact.
- Remove last digit by dividing the number by 10 i.e. num = num / 10.
- Repeat steps 4-7 until the number becomes 0.
- Now, after the loop check condition for a strong number. If (sum == tmpNum,) then the given number is a strong number otherwise not.
#include <stdio.h> // Fills factorials of digits from 0 to 9. void preComputeFact(int *fact) { int i; fact[0] = fact[1] = 1; for (i = 2; i<10; ++i) { fact[i] = fact[i-1] * i; } } // Returns 1 if num is Strong int isStrong(int num, const int *fact) { int sum = 0; // Traverse through all digits of num. int tmpNum = num; while (tmpNum) { sum += fact[tmpNum%10]; tmpNum /= 10; } return (sum == num); } int main() { int num; int fact[10] = {0}; //Compute fact 0-9 preComputeFact(fact); //Get input a number from user printf("Enter any number: "); scanf("%d", &num); isStrong(num,fact) ? printf("Strong number\n") : printf("Not a Strong number\n"); return 0; }
Output:
Enter any number: 145
Strong number