计算一个整数(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)的阶乘的位数的主要内容,如果未能解决你的问题,请参考以下文章