輸入一個小於1000000的正整數,是否能表達成式子:a1!+a2!+a3!+...+an (a1~an互不相等)。
因為10!>1000000,所以先打1~10的階乘表。從a[10]開始遞減判斷。(a[0]=0!=1)
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { //freopen("in.txt","r",stdin); int n; int a[11]; memset(a,0,sizeof(a)); a[0]=a[1]=1; for(int i=2; i<=10; i++) a[i]=i*a[i-1]; while(scanf("%d",&n)) { if(n<0) break; bool flag=true; if(n!=0) for(int i=10; i>0; i--) { if(n<=a[i] && n>=a[i-1]) n-=a[i-1]; if(n==0) { flag=false; break; } } if(flag) printf("NO\n"); else printf("YES\n"); } return 0; }