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

阶乘后的零

时间:2020-07-30 22:11:58      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:代码   tco   pre   改善   public   int   复杂   rail   组成   

题目: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;
}

阶乘后的零

标签:代码   tco   pre   改善   public   int   复杂   rail   组成   

原文地址:https://www.cnblogs.com/bendandedaima/p/13406103.html

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