您的位置:首页 > 其它

哈理工OJ 1425 阶乘问题(水题)

2016-08-16 18:08 411 查看
阶乘问题

Time Limit: 1000 MS Memory Limit: 65536 K

Total Submit: 164(82 users) Total Accepted: 87(76 users) Rating: Special Judge: No

Description

已知一个正整数n,请问能否将n表示成若干个不同的正整数的阶乘的和。

Input

输入包含多组测试数据。

对于每组测试数据:

第1行,包含一个正整数n (1 ≤ n ≤ 1018)

处理到文件结束

Output

对于每组测试数据:

如果能拆分,则输出YES,否则输出NO

Sample Input

5

7

Sample Output

NO

YES

Hint

7 = 1! + 3!

Author

齐达拉图@HRBUST

想到了就不难了。。。

下面是AC代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define maxn 1000000000000000000

ll a[105];
int main()
{
a[1]=1;
int le;
for(int i=2;i<=105;i++)
{
a[i]=i*a[i-1];
if(a[i]>=maxn)
{
le=i-1;
break;
}
}
ll n;
while(~scanf("%lld",&n))
{
for(int i=le;i>=1;i--)
{
if(a[i]<=n)
{
n=n-a[i];
}
if(n==0)
{
break;
}
}
if(n==0)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  哈理工OJ