标签:hdu 1018 big number log10n
Big Number
2 10 20
7 19
这是一道比较有意思的题目。给出一个数,然后求出这个数的阶乘的位数。第一想法肯定就是先求出这个数的阶乘,然后数有几位数。然并卵!肯定求不出的。然后找到如下资料:N的阶乖的位数等于LOG10(N!)=LOG10(1)+.....LOG10(N)。ok,上代码:
#include<cstdio> #include<cmath> int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ int x; double sum=0; scanf("%d",&x); for(int j=1;j<=x;j++) sum+=log10(j); printf("%d\n",int(sum)+1); } return 0; }同时又找到一点资料:Stirling公式:n!与√(2πn) * n^n * e^(-n)的值十分接近
#include <stdio.h> #include <math.h> const double PI = acos(-1.0); const double ln_10 = log(10.0); double reback(int N) { return ceil((N*log(double(N))-N+0.5*log(2.0*N*PI))/ln_10); } int main() { int cas,n; scanf("%d",&cas); while(cas--) { scanf("%d",&n); if(n<=1)printf("1\n"); else printf("%.0lf\n",reback(n)); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:hdu 1018 big number log10n
原文地址:http://blog.csdn.net/a995549572/article/details/47059127