码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-03-18 18:43:31      阅读:728      评论:0      收藏:0      [点我收藏+]

标签:就是   要求   bit   ret   str   mat   sqrt   +=   循环   

对于一个正整数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)的阶乘的位数

标签:就是   要求   bit   ret   str   mat   sqrt   +=   循环   

原文地址:https://www.cnblogs.com/taoge305/p/10553727.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!