n的阶乘的位数

输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。
Input
输入N(1 <= N <= 10^6)
Output
输出N的阶乘的长度
Sample Input
6
Sample Output
3

#include<stdio.h>
#include<math.h>

using namespace std;

#define pi 3.14159265
#define e 2.71828182 

int main()
{
    int n, digit;
    scanf ("%d", &n);
    digit= (int) ((0.5 * log (2 * pi * n) + n * log (n) - n) / log (10));
    printf ("%d\n", digit + 1);
    return 0;
}

斯特林公式(Stirling’s approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候,斯特林公式的取值已经十分准确。
具体公式:n!≈√(2πn) (n/e)n,根号只作用于(2πn,后边的n是n次方。

我们对等号两边同时取以10为底的对数,则可得:(设k为n!的位数)

k-1 =log10(n!)= log10(√(2πn))+nlog10(n/e)

k为什么要减1呢?很简单,log10(10) = 1,但是10是两位数,所以我们所求的位数与实际相差1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值