ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

阶乘后的零(力扣第172题)

2020-06-03 12:55:59  阅读:238  来源: 互联网

标签:25 能够 个数 力扣 因子 分解 阶乘 172


题目

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

分析:

  求尾数为0的个数,那就要分析如何才能使得尾数会有0,其实就是在求阶乘运算的过程中存在10这个因子,继续分解,实质就是存在2和5这两个因子,有多少个2*5,则结尾就会有多少个0,而2*5个的个数,其实受限于5的个数,因为2是一个较小的值,且是更多数的因子,因此对于0-n这些数中,能够分解出的5的个数一定是小于分解出的2的个数的。所以能够分解出多少个5,那么尾数就会有多少个0。

  那么如何求出能够分解出的5的个数呢,我们来找一下规律,假如:

  n = 5时,5!= 1*2*3*4*5,能够分解出的5这个因子的个数是1个;

  n = 6时,6!= 1*2*3*4*5*6 ,能够分解出的5这个因子的个数是1个;

  n = 10时,10! = 1*2*3*4*5*6*7*8*9*10,能够分解出的5这个因子的个数是2个;

  n = 30时,30!= 1*2*……*25*26*27*28*29*30,能够分解出的5这个因子的个数是7个;

  从以上的规律可以看出,能够分解出5这个因子的数都是5的倍数,所以n/5可以求出不大于n的情况下,5的倍数的个数,那么有多少个5的倍数就会提取出多少个因子5,但是,这还没有结束,看上边最后一个例子,30的阶乘,为啥分解出因子5的个数是7个而不是6个,原因在于25这个数的存在,它能够分解出两个因子5,所以n的阶乘能够一共分解出7个因子5。

  所以不大于n时,n/25可以求出25倍数的个数,那就可以再提取相应个数的因子5出来;然后继续判断n/5^3   ……

最终5的个数是:n/5 + n/5^2 + n/5^3+……

代码实现:

public int trailingZeroes(int n) {
    if (n < 5){
            return 0;
    }
    int res = 0;
    while (n != 0){
        res += n / 5;
        n = n/5;
    }
    return res;
}

标签:25,能够,个数,力扣,因子,分解,阶乘,172
来源: https://www.cnblogs.com/yxym2016/p/13036838.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有