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

来源:互联网 发布:苏州天创软件 编辑:程序博客网 时间:2024/06/12 23:11

阶乘问题
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 1000000000000000000ll 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;}
0 0
原创粉丝点击