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

求一个数阶乘的位数

时间:2015-08-16 00:45:34      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:一个数阶乘的位数

求一个数阶乘的位数

flyfish 2015-8-15

例如 7!=5040 ,7的阶乘结果是4位数(10进制)

求一个数的位数

1 循环方法

int get_digit_loop(int N)
 {
    int digit = 0;
    do
    {
        digit ++;
    } while ((N /= 10) > 0);
    return digit;
}

2 递归方式

int get_digit_recursion(int N)
{
    int digit = 0;
    digit = N < 10 ? 1 : 1 + get_digit_recursion(N/10);
    return digit;
}

3 math头文件自带的库函数

int get_digit_lib(int N)
{
    int digit = (floor) (log10(N)) + 1;
    return digit;
}

求一个数阶乘的位数
可以直接采用log10求一个数阶乘的位数
N=n!
方法1
log10(n!)
=log10(1?2?3?n)
=log10(1)+log10(2)++log10(n)

log10N表示以10为底,N的对数。缩写是lgN.

natural logarithm 自然对数
natural 英 [‘n?t?(?)r(?)l] 美 [‘n?t?r?l]
logarithm 英 [‘l?g?r?e(?)m; -r?θ-] 美 [‘l?ɡ?r?e?m]

方法2
利用斯特林公式
斯特灵公式
Stirling’s approximation
Stirling’s formula

Stirling 英 [‘st?:li?]
approximation 英 [?,pr?ks?’me??n] 美 [?’prɑks?’me??n][数] 近似法;接近;[数] 近似值
formula 英 [‘f??mj?l?] 美 [‘f?rmj?l?][数] 公式,准则;配方;婴儿食

log10(n!)
=log10(sqrt(2?pi?n))+n?log10(n/e)

e 是(mathematical constant)数学常数
e2.71828
以e为底的对数叫自然对数(Natural logarithm)
pi也是mathematical constant
Pi 3.14159265 圆周率
the ratio of a circle’s circumference to its diameter
圆的周长与直径的比值

int digit_stirling(int n)
{
    double PI=acos(double(-1));// PI的值=反余弦函数 -1.0为Pi, 1为0。
    double e=exp(double(1));//e的值
    return floor(log10(sqrt(2*PI*n))+n*log10(n/e))+1;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

求一个数阶乘的位数

标签:一个数阶乘的位数

原文地址:http://blog.csdn.net/flyfish1986/article/details/47687645

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