POJ1423 Big Number 暴力or斯特林公式??

好吧这题很水。。。可是我没想到正解。。。


题意:求n!有多少位。

正解:斯特林公式。

直接放代码。。。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<vector>
#include<map>
#include<set>
#define ll long long
#define R register int
static char B[1<<15],*S=B,*D=B;
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin))?EOF:*S++)
const int N=10000000;
const long double PI=3.141592653589793238463,e=2.7182818284590452354;
using namespace std;
inline int g() {
    R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;
    do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
} double d;
inline int calc(int n) {
    return log10(2*PI*n)/2.0+n*log10(n/e);
}
signed main() {
    R t=g(); while(t--) {
        R n=g(); printf("%d
",calc(n)+1);
    }    
}

然后是暴力:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<vector>
#include<map>
#include<set>
#define ll long long
#define R register int
static char B[1<<15],*S=B,*D=B;
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin))?EOF:*S++)
const int N=10000000;
const long double PI=3.141592653589793238463,e=2.7182818284590452354;
using namespace std;
inline int g() {
    R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;
    do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
} double d; int c[N];
signed main() {
    for(R i=1;i<=N;++i) d+=log10(i),c[i]=(int)d+1;
    R t=g(); while(t--) {
        R n=g(); printf("%d
",c[n]);
    }    
}

2019.06.02怕不是失了智qwq

原文地址:https://www.cnblogs.com/Jackpei/p/10964789.html