首页 > 试题广场 >

2014! 的末尾有 ( )个0?

[填空题]
推荐
末尾为0,主要看乘积项中2和5的个数,由于2的个数明显比5多,则只需看5的个数即可
2014/5 = 402....4
2014/25 = 80....14
2014/125 = 16....14
2014/625 = 3....19
故2014!末尾0的个数为402+80+16+3 = 501
编辑于 2015-02-03 18:17:17 回复(7)
看到上面巨巨都给出了 2014/5 + 2014/25 + ...+ 2015/625 的公式,并且解释说这样除是算出来 至少有一个因子是5  至少有两个因子是5。这样子错倒是没错,不过不太好理解。大家可以看看我的对这个公式这个做法的理解。

1. 末尾出现0的原因,这个大家都知道。5*偶数会出现0,但是现在问题就是 5 乘以无限个偶数,会出现无限的0吗。 答案是否定的。因为5*2=10  末尾全都是0了,从此以后,无论再怎么乘偶数,所得,也就只有1个0。 这就是我们公式这样算的核心依据(也就是只有1个5的因子,那么只能产生一个0)。这样算起来的话,25就可以乘以两个偶数(25*2=50;50*2=100 )产生两个0,当末尾全为0后,无论再怎么乘都不会产生新的0。1 25就可以乘以三个偶数 (125*2=250;250*2=500;500*2=1000  )产生三个0,当末尾全为0后,无论再怎么乘都不会产生新的0。(其实我们现在可以归纳出能否产生新的0的条件了,数字首位之后全为0时,那么他无论怎么乘都不会产生新的0了)

2. 理解1了以后再来看这个题目就简单多了。虽然算5的时候包含了 25,125,625,25确实是重复出现了,但是,但是因为一个25可以产生两个0,在算5的时候算了1次,在算25的时候算上了一次,这样就刚好把两次算完,并没有多加或者遗漏(同理算125的时候,在5的时候算了一次,25的时候算了一次,125自己这算了一次,合起来一共三次,完全包含进去了)。

3. 以上,就是对 2014/5 + 2014/25 + ...+ 2015/625  我的理解 Orz
发表于 2016-01-21 14:53:20 回复(6)
假设 末尾有 k 个0,所以 2014! = x * 10^k ;

10 ^ k = (2 * 5 )^ k = 2^k * 5^k, 明显所有数字中因数含有2的数字多于含有5的数字。因此只要求得所有数字中的因数中一共有所少个

数字5即可。

首先,5,10,15,20,25.....2010 , 这些数字因数都含有5,但是发现有的数字中5的因数不止一个。

至少含有1个因数为 5 的数字有: 2014 / 5 = 402 

至少含有2个因数为 5 的数字有: 2014 / 25 = 80

至少含有3个因数为 5 的数字有: 2014 / 125 = 16

至少含有4个因数为 5 的数字有: 2014 / 625 = 3

不存在含有5的因数的数字的个数大于等于5的情况。

综上,因数5 的总个数为:

402 + 80 + 16 + 3 = 501



发表于 2015-03-26 07:57:31 回复(1)
。。。额我的想法是2014/5=402,这样的数贡献了一个5的因子;
2014/25=80,贡献了2个5的因子;
2014/125=16,贡献了3个5的因子;
2014/625=3,贡献了4个5的因子;
由于每个上一层都包含了下一层的数,所以结果是:
3*4+(16-3)*3+(80-16)*2+(402-80)*1=501
发表于 2016-09-21 22:37:33 回复(1)
#include <iostream>
using namespace std;
//2014!里面0的个数.
int Giral(int x)
{
    int i=0;
    int j=0;
    while(x)
    {
        int sum = x;
        if(x%2==0)
            {
        while(x%2==0)
            {
                x/=2;
                i++;
            }
            }
            if(x%5==0)
            {
            while(x%5==0)
            {
                x/=5;
                j++;    
            }
            }
        sum--;
        x=sum;
    }
    return i>j?j:i;
}
int main()
{
    cout<<Giral(2014)<<endl;    
    return 0;
}
发表于 2015-04-28 00:04:27 回复(0)
Orz
发表于 2014-11-21 09:52:27 回复(1)

1 2014 ,每个数都可以被分解为 k*2x5y,k,x,y 均为整数,不管 k 为何值相乘肯定不会产生 0,

2014 =k12X15y1 * k22X25y2*...*k20142X20145y2012=(k1*k 2   *...*k 2014)*( 2 )x1+x2+...+x2014(5)y 1+y2+...+y2014

1-1014

能提取出 54 的只有 2014/625=3.2 3

能提取出 53 的有 2014/125=16.1 ,有 16

能提取出 52 的有 2014/25=80.5 ,有 80

能提取出 51 的有 2014/5=402.8 ,有 402

能提取 51 不能提取 52 的有 402-80=322

能提取 52 不能提取 53 的有 80-16=64

能提取 53 不能提取 54 的有 16-3=13

y1+y2…+y1024=322+64*2+13*3+3*4=501

发表于 2017-04-14 11:03:22 回复(0)
假设 末尾有 k 个0,所以 2014! = x * 10^k ;

10 ^ k = (2 * 5 )^ k = 2^k * 5^k, 明显所有数字中因数含有2的数字多于含有5的数字。因此只要求得所有数字中的因数中一共有所少个

数字5即可。

首先,5,10,15,20,25.....2010 , 这些数字因数都含有5,但是发现有的数字中5的因数不止一个。

至少含有1个因数为 5 的数字有: 2014 / 5 = 402 

至少含有2个因数为 5 的数字有: 2014 / 25 = 80

至少含有3个因数为 5 的数字有: 2014 / 125 = 16

至少含有4个因数为 5 的数字有: 2014 / 625 = 3

不存在含有5的因数的数字的个数大于等于5的情况。

综上,因数5 的总个数为:

402 + 80 + 16 + 3 = 501
发表于 2017-03-21 11:31:56 回复(0)
只要分析清楚2014!中有多少个因子5就可以了
发表于 2016-10-25 20:38:00 回复(0)
2014里有402个数是5的倍数
2014中有80个数25的倍数
2014中有16个数是125的倍数
2014中有3个数是625的倍数
所以最后5的因为个数便是末尾0的个数,即等于402+80+16+3=501
发表于 2015-10-24 21:36:05 回复(0)
羽头像
501
发表于 2014-11-19 17:14:12 回复(0)