1060 - 阶乘的和
有些数可以表示成若干个不同阶乘的和。例如,9=1!+2!+3!。小明对这些数很感兴趣,所以他给你一个正整数n,想让你告诉他这个数是否可以表示成若干个不同阶乘的和。
Input
输入包含多组测试数据。每组输入为一个非负整数n(n<=1000000),当n为负数时,输入结束。
Output
对于每组输入,如果n可以表示成若干个不同阶乘的和,则输出YES,否则输出NO。
Examples
Input
9 -1
Output
YES
Solution C
#include<stdio.h> int main() { int n,a[10]={1,1,2,6,24,120,720,5040,40320,362880},i; while(scanf("%d",&n)!=EOF,n>=0) { if(!n) puts("NO"); else { for(i=9;i>=0;i--) if(n>=a[i]) n-=a[i]; puts(n?"NO":"YES"); } } return 0; }
Solution C++
#include<stdio.h> int main() { int n,a[10]={1,1,2,6,24,120,720,5040,40320,362880},i; while(scanf("%d",&n)!=EOF,n>=0) { if(!n) puts("NO"); else { for(i=9;i>=0;i--) if(n>=a[i]) n-=a[i]; puts(n?"NO":"YES"); } } return 0; }