如果一个十进制正整数等于组成它的各位数字的阶乘之和,则成该正整数称为阶乘和 数。例如正整数145,1!+4!+5!等于145,因此145就是一个阶乘和数。输入一个正整数n,计算它的 各位数字的阶乘之和,判断它是否是一个阶乘和数。当输入的数字为阶乘和数时,输出“Yes”,否则 输出“No”。
时间: 2023-05-26 11:06:12 浏览: 138
算法1:
使用递归函数计算n的阶乘,判断一个数字是否为阶乘和数
时间复杂度:$O(\log_{}(n))$
空间复杂度:$O(\log_{}(n))$
C++ 代码
```cpp
#include <iostream>
using namespace std;
int factorial(int n){
if(n<=1) return 1;
return n*factorial(n-1);
}
bool isFactorialSum(int n){
int sum=0, num=n;
while(num>0){
int digit=num%10;
sum+=factorial(digit);
num/=10;
}
return sum==n;
}
int main(){
int n;
cin>>n;
if(isFactorialSum(n)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}
```
算法2:
使用数组存储0~9的阶乘,判断一个数字是否为阶乘和数
时间复杂度:$O(\log_{}(n))$
空间复杂度:$O(1)$
C++ 代码
```cpp
#include <iostream>
using namespace std;
int factorial[10]={1,1,2,6,24,120,720,5040,40320,362880};
bool isFactorialSum(int n){
int sum=0, num=n;
while(num>0){
int digit=num%10;
sum+=factorial[digit];
num/=10;
}
return sum==n;
}
int main(){
int n;
cin>>n;
if(isFactorialSum(n)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}
```
阅读全文