关闭

n的阶乘末尾含0的个数

标签: n的阶乘末尾0个数
913人阅读 评论(0) 收藏 举报
分类:

本博主曾被问过这样一个问题:求n的阶乘中末尾含有多少个0。例如n=10,n!=3628800,那么n!末尾有两个0。

直接计算n!的值显然不合适,因为n!数值太大,很容易溢出。而且这种无脑的计算方式,显然不适合面试的时候装nbility拿高薪offer。

1解法一:分解质因数

本博主当时被问这个问题的时候的第一反应就是:要相乘产生0,那肯定是与5相乘的结果。对n!如果分解质因数的话,结果为0的个数只与2与5的个数有关,每一次2*5就能产生一个0。因为2的个数肯定要大于5的个数,所以只要关注5的个数就可以了。

2解法二:解法一的升级版

ret=n/5+n/52+n/53+

思路讲完了,按照我们的惯例:
talk is cheap, show me the code:

#!/usr/bin/env python
#coding:utf-8

'''
@author: lei.wang
'''

def fact_first(n):
    ret = 0
    for i in xrange(n+1):
        j = i
        while (j%5 == 0 and j > 0): #注意要加上j>0,否则会死循环
            ret += 1
            j /= 5

    return ret

def fact_second(n):
    ret = 0
    while (n):
        ret += n/5
        n /= 5

    return ret

if __name__ == '__main__':
    ret_one = fact_first(100)
    print "ret_one is: ",ret_one
    ret_sec = fact_second(100)
    print "ret_sec is: ",ret_sec        

运行结果

ret_one is:  24
ret_sec is:  24
0
0
查看评论

[LeetCode]计算N的阶乘末尾0的个数

这是LeetCode上的p172,计算N!末尾0的个数: 1) 10 = 5 x 2 2) count_5 综上,很简单能够想到一个naive的算法: for i = 1 -> n count_5 = count(i) //count(i) 计算i中有多少个因子5 fu...
  • pjt73651
  • pjt73651
  • 2015-09-11 19:25
  • 391

计算N的阶乘结果末尾含多少个零

计算N的阶乘结果末尾含多少个零
  • wuhengde
  • wuhengde
  • 2016-08-16 23:33
  • 1055

尾部的0(n的阶乘的尾部0的个数)

设计一个算法,计算出n阶乘中尾部零的个数 您在真实的面试中是否遇到过这个题?  Yes 样例 11! = 39916800,因此应该返回 2 class Solution { /* * param n: An descip...
  • wwe4023
  • wwe4023
  • 2017-06-01 20:51
  • 89

N!的结果中末尾有多少个0,即可以在N阶乘中找到5的个数就是N阶乘结果的末尾会有几个0了,请看以下分析

酷狗的一个笔试题,有点意思!         问 N !的结果中末尾有多少个0?给出分析与编程计算。           分析:要知道N!有几个...
  • fnhrifnhri
  • fnhrifnhri
  • 2013-03-11 15:35
  • 893

求N的阶乘N!中末尾0的个数

有道问题是这样的:给定一个正整数N,那么N的阶乘N!末尾中有多少个0呢?例如:N=10,N=3628800,则N!的末尾有两个0;直接上干货,算法思想如下:对于任意一个正整数N!,都可以化为N!= (2^X)*(3^Y)* (5^Z)......的形式,要求得末尾0的个数只需求得min(X, Z...
  • u013266697
  • u013266697
  • 2016-10-16 22:05
  • 1218

(ACM数论)求N的阶乘末尾有多少个0

问题描述:给定一个整数N,那么N的阶乘N!末尾有多少个0?这个问题的难点在于,不能直接计算出N!,因为会溢出。既然不能直接计算,那就换个姿势计算(手动滑稽)首先,我们考虑到N!末尾0的个数和 N!有多少个因子10有关,而10 = 2 * 5 ,于是我们得到了一个解法:把2,3,… ,N每个数拥有因子...
  • KasumiMasami
  • KasumiMasami
  • 2016-08-29 16:23
  • 945

判断N!阶乘中末尾0的个数

如果我们要判断出0的个数,如果我们直接求N!那么数据会很大,数据可能溢出, 那么为了得到0的个数我们知道可以从10的角度进行判断,如果我们知道N!中10的个数, 我们就可以判断出0的个数, 如果N!=K*10^n,K是不能被10整除的数,那么我们可以根据n就可以得到0的个数, 考虑1...
  • qq_18343569
  • qq_18343569
  • 2015-11-15 16:09
  • 1017

N的阶乘末尾有多少个0

问题描述:                   给定一个数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3628800  如果N=10000呢,怎么计算?     &...
  • u014112584
  • u014112584
  • 2014-03-17 17:46
  • 1945

如何求N的阶乘所得的数字末尾含有多少个0

原题是这样:  给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。 初看这样的题目可能会想到直接求出N!的阶乘,然后再计算出0的个数。显然用这种方法如果N很大的情况下,非常容易溢出。所以我们可以换个角度来分析...
  • xia0cai
  • xia0cai
  • 2010-04-10 20:28
  • 2322

(java)求N阶乘末尾0的个数

在logn的时间内 找到n!末尾有几个零 首先,要清楚 n!末尾有几个零是由这个数字的质因子中有几个成对的2 和5 决定的。我们又知道n! = n(n-1)(n-2)...... 1 ,不难看出随着n的增大,n!中质因子2要比5多的多! 那么我们可以计算n中包含5的数量,这个数量就是末尾0的值代...
  • chaiqunxing51
  • chaiqunxing51
  • 2016-03-23 11:41
  • 487
    个人资料
    • 访问:1476443次
    • 积分:13601
    • 等级:
    • 排名:第1129名
    • 原创:311篇
    • 转载:98篇
    • 译文:1篇
    • 评论:153条
    最新评论