码迷,mamicode.com
首页 > 其他好文 > 详细

zoj 2358,poj 1775 Sum of Factorials(数学题)

时间:2014-07-01 17:58:54      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   art   

题目poj

题目zoj

 

 

 

bubuko.com,布布扣
//我感觉是题目表述不确切,比如他没规定xi能不能重复,比如都用1,那么除了0,都是YES了
//算了,这种题目,百度来的过程,多看看记住就好
//题目意思:判断一个非负整数n能否表示成几个数的阶乘之和
//这里有一个重要结论:n!>(0!+1!+……+(n-1)!),
//证明很容易,当i<=n-1时,i!<=(n-1)!,故(0!+1!+……+(n-1)!)<=n*(n-1)!=n!.
//     由于题目规定n<=1000000,而10!=3628800>100000,故只需保存前10项的阶乘.
//       有两个需要注意的地方:1>如果题目输入0,按照上面的方法处理得到的结果是"YES",
//而按照题目的意思应该输出"NO",所以需要特别处理.
//              2>题目输入结束的方法是以如果输入的数为负数就结束输入.

//10! = 3628800 > 1000000
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int main()
{
    int n,i;
    int fact[11];//这里还是要开的大一点。。因为下标从0开始
    fact[0]=1;
    for(i=1;i<=10;i++)
        fact[i]=fact[i-1]*i;
    
    while(scanf("%d",&n)!=EOF)
    {
        if(n<0) break;
        if(n==0)
            printf("NO\n");
        else {
                for(i=10;i>=0;i--) //之前错了,是这样的:0!=1 ,也算进去的
                {
                    if(n-fact[i]>=0)
                        n-=fact[i];
                }
            if(n==0)
                printf("YES\n");
            else
                printf("NO\n");
        }
    }
    return 0;
}
View Code

 

zoj 2358,poj 1775 Sum of Factorials(数学题),布布扣,bubuko.com

zoj 2358,poj 1775 Sum of Factorials(数学题)

标签:style   blog   http   color   os   art   

原文地址:http://www.cnblogs.com/laiba2004/p/3817839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!