#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
long n,k;
double i,x;
while(~scanf("%d",&n))
{
x=0;
for(i=1; i<=n; i++)
x+=log(i)/log(10.0);
k=(int)x+1;
printf("%d\n",k);
}
return 0;
}
x+=log(i)/log(10.0);这部使用换底公式,阶乘的位数就等于lgN!+1,即对1~N取对数的和+1即可。
而lgN可以用换底公式变一下,注意double型
#include<math.h>
using namespace std;
int main()
{
long n,k;
double i,x;
while(~scanf("%d",&n))
{
x=0;
for(i=1; i<=n; i++)
x+=log(i)/log(10.0);
k=(int)x+1;
printf("%d\n",k);
}
return 0;
}
x+=log(i)/log(10.0);这部使用换底公式,阶乘的位数就等于lgN!+1,即对1~N取对数的和+1即可。
而lgN可以用换底公式变一下,注意double型
这种方法是在别人的博客里边看的 我觉得写得挺好 我不会用斯特林公式 感觉这个真的好用
转自http://blog.csdn.net/yahreso/article/details/2101689