尾部的零

原创 2016年05月31日 10:20:49

描述:设计一个算法,计算出n阶乘中尾部零的个数

最开始看到题目,没什么灵感。查了一些资料,记录如下:通过求能够被2整除和能够被5整除个数的最小值就是答案,或者直接求能够被5整除的个数就是答案(因为能够被5整除的个数明显比较小)

原理是: 
把1 × 2 ×3× 4 ×……×N中每一个因数分解质因数,结果为: 1 × 2 × 3 × (2 × 2) × 5 × (2 × 3) × 7 × (2 × 2 ×2) ×…… 
10进制数结尾的每一个0都表示有一个因数10存在——任何进制都一样,对于一个M进制的数,让结尾多一个0就等价于乘以M。 10可以分解为2 × 5——因此只有质数2和5相乘能产生0,别的任何两个质数相乘都不能产生0,而且2,5相乘只产生一个0。 所以,分解后的整个因数式中有多少对(2, 5),结果中就有多少个0,而分解的结果中,2的个数显然是多于5的,因此,有多少个5,就有多少个(2, 5)对。 


class Solution {
    /*
     * param n: As desciption
     * return: An integer, denote the number of trailing zeros in n!
     */
    public long trailingZeros(long n) {
        // write your code here
        long count = 0;
        for (long i = 5; n / i >= 1; i *= 5){
            count += n / i;
        }

       /*while (n / 5 > 0){
            count += n / 5;
            n = n / 5;
        } 也可以是这样*/
        return count;
    }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

如何计算阶乘运算结果尾部有多少个零

Write an algorithm which computes the number of trailing zeros in n factorial. 阶乘n! = n*(n-1)*...*1...

<LeetCode> 题2:n阶乘尾部零的个数

题目描述:设计一个算法,计算出n阶乘中尾部零的个数。注意:时间复杂度为O(lgn)。思路:要求n的阶乘,就是求1到n这n个数相乘。在这1到n个数当中,只有2和5相乘的结果才会出现0,其中10的倍数也可...

LintCode题解(2)--尾部的零

问题描述设计一个算法,计算出n阶乘中尾部 0 的个数样例11! = 39916800,因此应该返回2解题思路首先考虑,如果 N! = K * 10M,且 K 不能被 10 整除,那么 N! 末尾有 M...

计算n阶乘中尾部零的个数

写在前面本来觉得问题挺容易的,不打算记录,谁知道一不小心,还真没做出来。最终凭借“朴实”的算法思想解决了问题,但是其中的曲折还真是汗颜。科学的思维指导确实必不可少,“野路子”的朴素的战斗理论不论是效率...

文件尾部分割器

复试题:1000!的尾部有多少个0

以前在论坛里看过这个题,当是想:只要算下1-1000中有多少个个位数是5、0的数就可以了,坛友们也多是这么回复的,所以,我就想当然地认为自己是对的,也就没去好好地验证下这个问题 谁想,今天,我就被问...

页面公共头部尾部文件的引用

其实特别简单,第一步先引入AngularJS的js文件、第二步在body处设置一个ng-app,第三步就是设置一个ng-include在一个div中。(特别注意:放到服务器上才可以正常显示) firs...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)