贪心问题,首先考虑到n的范围n≤1,000,000,10!=3628800 9!=362880,只需要考虑0到9的阶乘
从9!开始减,减到最后,若为0,则输出”YES“,否则“NO”。因为n!>0!+1!+......(n-1)! (9>=n>=0)。另外要特判n为0时,否则会输出错误。
吐槽一句,题里面前面都是没用的话。。。。有用的就那么几句
代码:
package Test1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Test16_1038 {
/**
* by qr jobdu 1038 2014-8-12
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//10!=3628800 9!=362880 8!=40320 0--->9
StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
//由于n的范围 最多到9! 不能重复,并且可以为0
int facres[]=new int[10];
facres[0]=1;
for(int i=1;i<10;i++)
facres[i]=facres[i-1]*i;
while((st.nextToken())!=StreamTokenizer.TT_EOF){
int n=(int)st.nval;
if(n==0) //do not forget!!!
System.out.println("NO");
else{
for(int i=9;i>=0;i--){
if(n>=facres[i])
n=n-facres[i];
if(n==0)
break;
}
if(n==0)
System.out.println("YES");
else
System.out.println("NO");
}
}
}
}