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

Posted taoge305

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算一个整数(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为自然对数。不过我是记不住这个公式啊。

以上是关于计算一个整数(N)的阶乘的位数的主要内容,如果未能解决你的问题,请参考以下文章

python怎么求阶乘

斯特林(Stirling)公式 求大数阶乘的位数

1435 位数阶乘

matlab阶乘和程序

matlab阶乘和程序

杭电1018阶乘位数