给定一个整数N ,任务是检查N是否为阶乘。阶乘是等于其数字的阶乘之和的数字。
例子:
Input: N = 40585
Output: Yes
4! + 0! + 5! + 8! + 5! = 40585
Input: N = 234
Output: No
2! + 3! + 4! = 32
方法:创建一个大小为10的数组fact [] ,以存储事实[i]存储i的所有可能数字的阶乘。 。现在,对于给定数字的所有数字,使用前面计算的fact []数组找到数字的阶乘和。如果总和等于给定数字,则该数字是分解因子,否则不是。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
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
输出:
Yes