计算一个整数(N)的阶乘的位数

对于一个正整数N, 计算N! 的位数。例如N=4, 4!=24,那么位数就是2。

直接计算N!的数值,然后再去数位数,这个很难,因为N!很有可能超过int(32bit) 或long(64bit)的表达范围。

换一种思路,假设要求的位数为x, 那么一定满足 10^(x-1) <=N!<10^x。两边取10为底的对数,得到x-1<=log10(N!)<x。最终x 取 int(log10(N!))+1.

log10(N!) = log10(N)+log10(N-1)+log10(N-2)+...+log10(1)

代码如下: 

import math

def digitsNumOfFactorialN(n):
    sum = 0
    for i in range(1,n+1):
        sum +=math.log10(i)        
    return int(sum)+1

  

在网上找到另外一种快速解法,不用循环。利用如下公式:

log10(n!) = log10(sqrt(2 * PI * n)) + n * log10(n / e)

其中PI是圆周率,e为自然对数。不过我是记不住这个公式啊。

猜你喜欢

转载自www.cnblogs.com/taoge305/p/10553727.html