即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

杭电oj-1018-Big Number

编程语言 zfldongcidaci 8℃ 0评论

题意:


输入一个整数,求它的阶乘的十进制位数。


题目链接:


(http://acm.hdu.edu.cn/showproblem.php?pid=1018)


分析:


方法一:


该题目是求lgN!。可分解如下:


lg(N!) = lg(N(N-1)!) = lg(N) + lg((N-1)!) 则:


lg(N!) = lg(N) + lg(N-1) + … + lg(1)


位数= log10(1) + log10(2) + log10(3) + …… + log10(n) 取整数部分后+1


c++代码如下:

#include 
#include

using namespace std;
int solve(int n)
{
    double num=0;


        for(int i=1;i<=n;i++)
        num+=log10(i);
        return (int)num+1;
}
int main()
{
   int n;
    cin>>n;
    while(n--)
    {
        int k;
        cin>>k;

        cout<

方法二:


斯特林公式:


这里写图片描述


所以其位数应该可以表示为: log10(2*pi*n)/2+n*log10(n/e)+1

转载请注明:CodingBlog » 杭电oj-1018-Big Number

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情