Given an integer N and the task is to check whether N is a Factorion or not. A Factorion is a number which is equal to the sum of the factorials of its digits.
Examples:
Input: N = 40585
Output: Yes
4! + 0! + 5! + 8! + 5! = 40585
Input: N = 234
Output: No
2! + 3! + 4! = 32
Approach: Create an array fact[] of size 10 to store the factorials of all possible digits where fact[i] stores i!. Now for all the digits of the given number find the sum of factorials of the digits using the fact[] array computed earlier. If the sum if equal to the given number then the number is a Factorion else it is not.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; #define MAX 10 // Function that returns true // if n is a Factorion bool isFactorion( int n) { // fact[i] will store i! int fact[MAX]; fact[0] = 1; for ( int i = 1; i < MAX; i++) fact[i] = i * fact[i - 1]; // A copy of the given integer int org = n; // To store the sum of factorials // of the digits of n int sum = 0; while (n > 0) { // Get the last digit int d = n % 10; // Add the factorial of the current // digit to the sum sum += fact[d]; // Remove the last digit n /= 10; } if (sum == org) return true ; return false ; } // Driver code int main() { int n = 40585; if (isFactorion(n)) cout << "Yes" ; else cout << "No" ; return 0; } |
Java
// Java implementation of the above approach class GFG { static int MAX = 10 ; // Function that returns true // if n is a Factorion static boolean isFactorion( int n) { // fact[i] will store i! int fact[] = new int [MAX]; fact[ 0 ] = 1 ; for ( int i = 1 ; i < MAX; i++) fact[i] = i * fact[i - 1 ]; // A copy of the given integer int org = n; // To store the sum of factorials // of the digits of n int sum = 0 ; while (n > 0 ) { // Get the last digit int d = n % 10 ; // Add the factorial of the current // digit to the sum sum += fact[d]; // Remove the last digit n /= 10 ; } if (sum == org) return true ; return false ; } // Driver code public static void main (String[] args) { int n = 40585 ; if (isFactorion(n)) System.out.println( "Yes" ); else System.out.println( "No" ); } } // This code is contributed by AnkitRai01 |
Python3
# Python3 implementation of the approach MAX = 10 # Function that returns true # if n is a Factorion def isFactorion(n) : # fact[i] will store i! fact = [ 0 ] * MAX fact[ 0 ] = 1 for i in range ( 1 , MAX ) : fact[i] = i * fact[i - 1 ] # A copy of the given integer org = n # To store the sum of factorials # of the digits of n sum = 0 while (n > 0 ) : # Get the last digit d = n % 10 # Add the factorial of the current # digit to the sum sum + = fact[d] # Remove the last digit n = n / / 10 if ( sum = = org): return True return False # Driver code n = 40585 if (isFactorion(n)): print ( "Yes" ) else : print ( "No" ) # This code is contributed by # divyamohan123 |
C#
// C# implementation of the above approach using System; class GFG { static int MAX = 10; // Function that returns true // if n is a Factorion static bool isFactorion( int n) { // fact[i] will store i! int [] fact = new int [MAX]; fact[0] = 1; for ( int i = 1; i < MAX; i++) fact[i] = i * fact[i - 1]; // A copy of the given integer int org = n; // To store the sum of factorials // of the digits of n int sum = 0; while (n > 0) { // Get the last digit int d = n % 10; // Add the factorial of the current // digit to the sum sum += fact[d]; // Remove the last digit n /= 10; } if (sum == org) return true ; return false ; } // Driver code public static void Main (String[] args) { int n = 40585; if (isFactorion(n)) Console.WriteLine( "Yes" ); else Console.WriteLine( "No" ); } } // This code is contributed by Mohit kumar |
Javascript
<script> // Javascript implementation of the approach const MAX = 10; // Function that returns true // if n is a Factorion function isFactorion(n) { // fact[i] will store i! let fact = new Array(MAX); fact[0] = 1; for (let i = 1; i < MAX; i++) fact[i] = i * fact[i - 1]; // A copy of the given integer let org = n; // To store the sum of factorials // of the digits of n let sum = 0; while (n > 0) { // Get the last digit let d = n % 10; // Add the factorial of the current // digit to the sum sum += fact[d]; // Remove the last digit n = parseInt(n / 10); } if (sum == org) return true ; return false ; } // Driver code let n = 40585; if (isFactorion(n)) document.write( "Yes" ); else document.write( "No" ); </script> |
Yes
Time Complexity: O(log10n)
Auxiliary Space: O(MAX)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!