- 描述
-
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
- 输入
- 第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000; - 输出
- 如果符合条件,输出Yes,否则输出No;
- 样例输入
-
2 9 10
- 样例输出
-
Yes No
-
View Code
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int main() 6 { 7 int n,i,a[10],sum=1;a[0]=0; 8 for(i=1;i<10;i++) 9 { 10 sum*=i; 11 a[i]=sum; 12 //cout<<a[i]<<endl; 13 } 14 cin>>n; 15 int m,t; 16 while(n--) 17 { 18 cin>>m; 19 t=m; 20 for(i=9;i>0;i--) 21 { 22 t=t-a[i]; 23 if(t==0) break; 24 else if(t<0) 25 { 26 t=t+a[i]; 27 } 28 } 29 if(t==0) cout<<"Yes"<<endl; 30 else cout<<"No"<<endl; 31 } 32 return 0; 33 }