游客 Signup | Login
中文 | En

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;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题