zoukankan      html  css  js  c++  java
  • 阶乘后的零

    题目:172. 阶乘后的零

    给定一个整数 n,返回 n! 结果尾数中零的数量。

    示例

    示例 1:
    
    输入: 3
    输出: 0
    解释: 3! = 6, 尾数中没有零。
    
    示例 2:
    
    输入: 5
    输出: 1
    解释: 5! = 120, 尾数中有 1 个零.
    说明: 你算法的时间复杂度应为 O(log n) 。
    

    解题思路

    1. 求尾数0的个数,即10,10只能由2*5组成,所以求因子中 2 和 5的个数即可
    2. 但是明显因子中2的数量>5的数量,所以只需要求因子中5的个数即可

    例如:25!= 1*2*3*4*(1*5)*........*(2*5).......*(3*5)........*(4*5).....*(5*5)

    可知
    每隔5位就有1个5
    每隔25位会有2个5
    每隔125位会有3个5
    .......以此类推
    

    结论:n!中因子5的个数 = n/5 + n/25 + n/125 .......
    tip:但是,分母可能会出现越界的情况!
    改善:例如计算n/25的时候 每次都把n/5之后更新回n,这样n/25更新完n后就变为了n/5 其他的依次类推

    代码

    public int trailingZeroes(int n) {
        //因子中5的个数
        int count = 0;
    
        //count = n/5 + n/25 + n/125 .......
        while (n > 0) {
            //5的个数
            count += n / 5;
            //更新n
            n = n / 5;
        }
        return count;
    }
    
  • 相关阅读:
    竞赛200
    竞赛202
    判断是node还是 浏览器端 typeof xxx==='string'
    闷油瓶
    关于算法题
    堆 heap, 准备博客参考
    私有npm 上发布 包
    竞赛199
    正则,转换数组
    设计模式之模板设计模式-以spring的各种template为例
  • 原文地址:https://www.cnblogs.com/bendandedaima/p/13406103.html
Copyright © 2011-2022 走看看