zoukankan      html  css  js  c++  java
  • zoj 2358,poj 1775 Sum of Factorials(数学题)

    题目poj

    题目zoj

    //我感觉是题目表述不确切,比如他没规定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
    ");
            else {
                    for(i=10;i>=0;i--) //之前错了,是这样的:0!=1 ,也算进去的
                    {
                        if(n-fact[i]>=0)
                            n-=fact[i];
                    }
                if(n==0)
                    printf("YES
    ");
                else
                    printf("NO
    ");
            }
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    bzoj2818
    bzoj1901
    bzoj1010
    loj6277
    bzoj1001
    bzoj1787
    选项卡
    日期选择器
    去掉文本框的外边框
    bootstarp 模态框大小尺寸的控制
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3817839.html
Copyright © 2011-2022 走看看