标签: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