zoukankan      html  css  js  c++  java
  • [原]NYOJ-数的位数-69

    大学生程序代写

    /*  NYOJ69 阶乘数位长度


    http://acm.nyist.net/JudgeOnline/problem.php?pid=69


    数的长度
    时间限制:3000 ms  |  内存限制:65535 KB 
    难度:1
    描述 
        N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?


    输入 
    首行输入n,表示有多少组测试数据(n<10)
    随后n行每行输入一组测试数据 N( 0 < N < 1000000 ) 
    输出 
    对于每个数N,输出N!的(十进制)位数。 
    样例输入 
    3
    1
    3
    32000样例输出 
    1
    1
    130271
    来源 
    ACM教程 
    上传者 
    rooot 



    *  方法一:

    *可设想n!的结果是不大于10的M次幂的数,即n!<=10^M(10的M次方),则不小于M的最小整数就是 n!的位数,对

     该式两边取对数,有 M =log10^n! 即:M = log10^1+log10^2+log10^3...+log10^n 循环求和,就能算得M值,

    该M是n!的精确位数。当n比较大的时候,这种方法方法需要花费很多的时间。


    方法二:

     利用斯特林(Stirling)公式的进行求解。下面是推导得到的公式:

      res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );

     当n=1的时候,上面的公式不适用,所以要单独处理n=1的情况!
    .
     有关斯特林(Stirling)公式及其相关推导,这里就不进行详细描述,有兴趣的话可看这里。

    这种方法速度很快就可以得到结果。详细证明如下:

      http://episte.math.ntu.edu.tw/articles/mm/mm_17_2_05/index.html
    14.
    */


    //c语言版
    #include <stdio.h>
    #include <math.h>
    int main()
    {
    int n,cas,i;
    double sum;
    scanf("%d",&cas);
    while (cas--)//n!≈√2πn { (n/e)^n }
    {
    scanf("%d",&n);
    sum=1;
    for(i=1;i<=n;i++) 
    sum+=log10((double)i);
    printf("%d ",(int)sum);
    }
    return 0;
    }


    //C++版


    /*
    #include<iostream>
    #include <cmath>
    using namespace std;


    int normal(double n){
    double x=0;
       while(n){
       x +=log10(n);
        n--;
    }
    return (int)x+1;
    }
     long stirling(double n){
    long x=0;
        if( n ==1 )
          x = 1;
       else{  x = (long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );
    }
    return x;
    }
        int main()
    {int n;
     cin>>n;//c++中输入一个数
          while(n--){ 
      int x;
            cin>>x;
         cout<<stirling(x)<<endl;//c++中输出一个数
     }
    return 0;


    }
    */
    作者:chao1983210400 发表于2013-7-10 13:19:06 原文链接
    阅读:6 评论:0 查看评论
  • 相关阅读:
    Misc1
    PXE
    VCL
    pacman usage
    .vimrc的配置
    Windows Server 2012 R2
    Windows 入门杂乱无章版
    VS Code Plugins And Configuration
    「Poetize5」GF弹钢琴
    「Poetize4」上帝造题的七分钟2
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218720.html
Copyright © 2011-2022 走看看