对于一个正整数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为自然对数。不过我是记不住这个公式啊。
原文地址:https://www.cnblogs.com/taoge305/p/10553727.html
时间: 2024-10-14 14:32:37