Program to check Strong Number

12 Jun, 2022
Strong Numbers are the numbers whose sum of factorial of digits is equal to the original number. Given a number, check if it is a Strong Number or not.Examples:  
Input  : n = 145
Output : Yes
Sum of digit factorials = 1! + 4! + 5!
                        = 1 + 24 + 120
                        = 145

Input :  n = 534
Output : No
 
 
1) Initialize sum of factorials as 0. 
2) For every digit d, do following
   a) Add d! to sum of factorials.
3) If sum factorials is same as given 
   number, return true.
4) Else return false.
An optimization is to precompute factorials of all numbers from 0 to 10. 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to check if a number is// strong or not.#include <bits/stdc++.h>using namespace std; int f[10]; // Fills factorials of digits from 0 to 9.void preCompute(){    f[0] = f[1] = 1;    for (int i = 2; i<10; ++i)        f[i] = f[i-1] * i;} // Returns true if x is Strongbool isStrong(int x){    int factSum = 0;     // Traverse through all digits of x.    int temp = x;    while (temp)    {        factSum += f[temp%10];        temp /= 10;    }     return (factSum == x);} // Driver codeint main(){    preCompute();     int x = 145;    isStrong(x) ? cout << "Yes\n" : cout << "No\n";    x = 534;    isStrong(x) ? cout << "Yes\n" : cout << "No\n";    return 0;}       
// Java program to check if// a number is Strong or not class CheckStrong{    static int f[] = new int[10];      // Fills factorials of digits from 0 to 9.    static void preCompute()    {        f[0] = f[1] = 1;        for (int i = 2; i<10; ++i)            f[i] = f[i-1] * i;    }         // Returns true if x is Strong    static boolean isStrong(int x)    {        int factSum = 0;              // Traverse through all digits of x.        int temp = x;        while (temp>0)        {            factSum += f[temp%10];            temp /= 10;        }              return (factSum == x);    }         // main function    public static void main (String[] args)    {          // calling preCompute        preCompute();             // first pass        int x = 145;        if(isStrong(x))        {            System.out.println("Yes");        }        else            System.out.println("No");                     // second pass        x = 534;        if(isStrong(x))        {            System.out.println("Yes");        }        else            System.out.println("No");    }}
# Python program to check if a number is# strong or not. f = [None] * 10 # Fills factorials of digits from 0 to 9.def preCompute() :    f[0] = f[1] = 1;    for i in range(2,10) :        f[i] = f[i-1] * i  # Returns true if x is Strongdef isStrong(x) :         factSum = 0    # Traverse through all digits of x.    temp = x    while (temp) :        factSum = factSum + f[temp % 10]        temp = temp // 10     return (factSum == x)     # Driver codepreCompute()x = 145if(isStrong(x) ) :    print ("Yes")else :    print ("No")x = 534if(isStrong(x)) :    print ("Yes")else:    print ("No") # This code is contributed by Nikita Tiwari.
// C# program to check if// a number is Strong or notusing System; class CheckStrong{    static int []f = new int[10];     // Fills factorials of digits from 0 to 9.    static void preCompute()    {        f[0] = f[1] = 1;        for (int i = 2; i < 10; ++i)            f[i] = f[i - 1] * i;    }         // Returns true if x is Strong    static bool isStrong(int x)    {        int factSum = 0;             // Traverse through all digits of x.        int temp = x;        while (temp > 0)        {            factSum += f[temp % 10];            temp /= 10;        }             return (factSum == x);    }         // Driver Code    public static void Main ()    {        // calling preCompute        preCompute();             // first pass        int x = 145;        if(isStrong(x))        {            Console.WriteLine("Yes");        }        else            Console.WriteLine("No");                     // second pass        x = 534;        if(isStrong(x))        {            Console.WriteLine("Yes");        }        else            Console.WriteLine("No");    }} // This code is contributed by Nitin Mittal.
<?php// PHP program to check if a number// is strong or not. $f[10] = array(); // Fills factorials of digits// from 0 to 9.function preCompute(){    global $f;    $f[0] = $f[1] = 1;    for ($i = 2; $i < 10; ++$i)        $f[$i] = $f[$i - 1] * $i;} // Returns true if x is Strongfunction isStrong($x){    global $f;    $factSum = 0;     // Traverse through all digits of x.    $temp = $x;    while ($temp)    {        $factSum += $f[$temp % 10];        $temp = (int)$temp / 10;    }     return ($factSum == $x);} // Driver codepreCompute();$x = 145; if(isStrong(!$x))    echo "Yes\n";else    echo "No\n";$x = 534;if(isStrong($x))    echo "Yes\n";else    echo "No\n";     // This code is contributed by jit_t?>
<script> // Javascript program to check if a number is// strong or not.  let f = new Array(10); // Fills factorials of digits from 0 to 9.function preCompute(){    f[0] = f[1] = 1;    for (let i = 2; i<10; ++i)        f[i] = f[i-1] * i;} // Returns true if x is Strongfunction isStrong(x){    let factSum = 0;     // Traverse through all digits of x.    let temp = x;    while (temp)    {        factSum += f[temp%10];        temp = Math.floor(temp/10);    }     return (factSum == x);} // Driver code     preCompute();     let x = 145;    isStrong(x) ? document.write("Yes" + "<br>") :    document.write("No" + "<br>");    x = 534;    isStrong(x) ? document.write("Yes" + "<br>") :    document.write("No" + "<br>");  //This code is contributed by Mayank Tyagi </script>
Output: 
Yes
No
Time Complexity: O(logn)
Auxiliary Space: O(n)
This article is contributed by Pramod Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
jit_t
mayanktyagi1709
amartyaghoshgfg
harshmaster07705
factorial
number-digits
Mathematical
Mathematical
factorial
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Sieve of Eratosthenes
Prime Numbers
Program to find GCD or HCF of two numbers
Minimum number of jumps to reach end
Find minimum number of coins that make a given value
The Knight's tour problem | Backtracking-1
Algorithm to solve Rubik's Cube
Program for Decimal to Binary Conversion