Codeup1085: 阶乘的和

题目描述
有些数可以表示成若干个不同阶乘的和。例如,9=1!+2!+3!。小明对这些数很感兴趣,所以他给你一个正整数n,想让你告诉他这个数是否可以表示成若干个不同阶乘的和。

输入
输入包含多组测试数据。每组输入为一个非负整数n(n<=1000000),当n为负数时,输入结束。

输出
对于每组输入,如果n可以表示成若干个不同阶乘的和,则输出YES,否则输出NO。

样例输入
9
-1

样例输出
YES


和HDU2021类似,只不过需要先算出小于1000000的最大的阶乘

#include<stdio.h>
int main()
{
    int a[11];
    a[0]=1;
    int n,i;
    for(i=1;i<11;i++)
    {
        a[i]=1;
        int s=i;
        for(int j=s;j>0;j--)
        {
            a[i]*=j;
        }
    }
    while(scanf("%d",&n)!=EOF)
    {
        int flag=0;
        if(n<0) break;
        if(n==0) printf("NO\n");
        else
        {
            for(i=9;i>=0;i--)
            {
                if(n>=a[i])
                {
                    n-=a[i];
                }
                if(n==0)
                {
                    flag=1;
                    break;
                 } 
            }
            if(flag!=0) printf("YES\n");
            else printf("NO\n");
            flag=0;
        }
    }
    return 0;
}
posted @ 2017-12-20 20:08  友人-A  阅读(161)  评论(0编辑  收藏  举报