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

    xiaoxiao2026-08-19  8

    阶乘问题 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; }
    转载请注明原文地址: https://ju.6miu.com/read-1311334.html
    最新回复(0)