对于求一个大数的阶乘的位数一般有两种方法:
第一种:
lg(N!)=[lg(N*(N-1)*(N-2)*......*3*2*1)]+1
=[lgN+lg(N-1)+lg(N-2)+......+lg3+lg2+lg1]+1
用C语言实现:
#include<stdio.h>
#include<math.h>
int main()
{
int n;
double sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum=sum+log10(i);
}
printf("%d\n",(int)sum+1);
return 0;
}
第二种:
用Stirling公式计算n!结果的位数时,可以两边取对数,
得: log10(n!) = log10(2*PI*n)/2+n*log10(n/E);
故n!的位数= log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)
#include<stdio.h>
#include<math.h>
#define PI 3.141592654
#define E 2.71828182846
int main()
{
int n,sum=1;
scanf("%d",&n);
if(n>3)
sum=log10(2*PI*n)/2+n*log10(n/E)+1;
printf("%d\n",sum);
return 0;
}