POJ--如何求阶乘的位数

来源:互联网 发布:兄弟连php视频 百度云 编辑:程序博客网 时间:2024/06/05 18:25

题意给你正整数n<=10^7 求n的阶乘的位数

当然 你可以去做大数的加法... 那么完全计算10的7次阶乘,然后统计其位数,也需要几十分钟才行。

这东西涉及到很多数学公式证明的问题,计算机仅仅只是辅助。

题目只需要求其位数。

解法1:

 现由斯特林[stirling]公式可得:
lnN!=NlnN-N+0.5ln(2N*pi)

而10的7次方阶乘的位数等于:
log10(N!)取整后加1
log10(N!)=lnN!/ln(10)

-----------------------------------朴素的分割线-------------------------------

# include <iostream># include <math.h>const double PI = 3.14159265 ;using namespace std;int main(){        int N,T;        cin>>T;        while(T--)        {                cin>>N;                int len=ceil((N*log((double)N)-N+log(2.0*(double)N*PI)/2.0)/log(10.0));                if(!len)len++; //len=0 when n=1 notice                cout<<len<<endl;        }        return 0;}
解法2:

#include<cstdio>#include<iostream>#include<math.h>using namespace std;int main(){   long i,m;   double sum;   scanf("%ld",&m);   sum=1.0;   for(i=1;i<=m;i++)   {    sum+=log10(i);}   printf("%ld\n",(long)sum);}


0 0
原创粉丝点击