Codeup1085: 阶乘的和

来源:互联网 发布:linux线程间通信方式 编辑:程序博客网 时间:2024/05/22 11:39

题目描述
有些数可以表示成若干个不同阶乘的和。例如,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;}
原创粉丝点击