n!末尾0的个数

Q:求n!末尾0的个数,例如5!=120,末尾有一个零,10!=3628800,有两个零。
A:最简单的思路就是把所有的数字进行分解质因数,例如:
6 = 23
15 = 3
5
64 = 222222 = 2^6
100 = 2^2 * 5^2
576 = 2^6 * 3^2
那么我们在计算n的阶乘时,实际上就是把所有小于等于n的正整数分解成质因数,
然后再将其乘到一起,那么末尾0的个数实际上就是2
5的个数,
而2的个数明显是很多很多的,所以问题就转化成了5的个数。
而只有5的倍数才有5这个因数,所以,
问题就进一步简化为小于等于n的数中有多少个数是5的倍数,
当然25的倍数,125的倍数,625还要单独考虑。
代码如下

public static int getNumbersOfZero(int n)
{
    int sum=0;
    while (n>0)
    {
        sum+=n/5;
        n/=5;
    }
    return sum;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 2,656评论 0 5
  • 小升初的过程中,竞赛成绩能起到相当大的作用,谈到竞赛就离不开奥数。以下是小学奥数题知识点大汇总: 1.和差倍问题 ...
    沪江中小幼阅读 1,146评论 0 7
  • 2009年一位神秘人物中本聪,发布了一种点对点的电子现金系统,从此推开了历史新的纪元。 从比特币诞生至今已经,经历...
    卡卡10086阅读 1,803评论 0 3
  • 那是一个八月的午后,刚刚经历完军训,晒的黝黑的皮肤,额头上不断的冒出的痘痘,披散凌乱的头发,一双一走路就嘎吱嘎吱直...
    十二君子阅读 2,005评论 0 14
  • 当自己通过阅读一本书,或通过听一场演讲,而获得一个新的概念或理论时,为了能够消化吸收这个新的知识,尽量尝试以自己的...
    随意咖啡阅读 145评论 0 0