题目描述
有些数可以表示成若干个不同阶乘的和。例如,9=1!+2!+3!。小明对这些数很感兴趣,所以他给你一个正整数n,想让你告诉他这个数是否可以表示成若干个不同阶乘的和。
输入
输入包含多组测试数据。每组输入为一个非负整数n(n<=1000000),当n为负数时,输入结束。
输出
对于每组输入,如果n可以表示成若干个不同阶乘的和,则输出YES,否则输出NO。
样例输入 Copy
9
-1
样例输出 Copy
YES
解题思路:思路不难,注意一个坑就是0的阶乘也是1就行了。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
int fac(int n){
if(n==1||n==0){
return 1;
}else return n*fac(n-1);
}
int main(){
int num,i,a[100];
for(i = 0;i <=10 ;i++){
a[i]= fac(i);
}
while(cin>>num){
if(num<0){
break;
}
if(num==0){
cout<<"NO"<<endl;
continue;
}
for(i = 10;i>=0 ;i--){
if(num-a[i]>=0){
num-=a[i];
}
if(num==0){
cout<<"YES"<<endl;
break;
}
}
if(num!=0){
cout<<"NO"<<endl;
}
}
return 0;
}