好吧这题很水。。。可是我没想到正解。。。
题意:求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