Check whether N is a Factorion or not - GeeksforGeeks

13 Mar, 2022
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! = 40585Input: 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++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; #define MAX 10 // Function that returns true// if n is a Factorionbool 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 codeint main(){    int n = 40585;    if (isFactorion(n))        cout << "Yes";    else        cout << "No";     return 0;}
// Java implementation of the above approachclass 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 implementation of the approachMAX = 10 # Function that returns true# if n is a Factoriondef 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 coden = 40585 if (isFactorion(n)):    print("Yes")else:    print("No")     # This code is contributed by# divyamohan123
// C# implementation of the above approachusing 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
<script>// Javascript implementation of the approach const MAX = 10; // Function that returns true// if n is a Factorionfunction 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)
divyamohan123
ankthon
mohit kumar 29
subhammahato348
factorial
Arrays
Mathematical
Arrays
Mathematical
factorial
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Count pairs with given sum
Chocolate Distribution Problem
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7