题目
给出一个数,求它的阶乘的位数。
思路
(int)(log10(n!)+1)求出的就是阶乘的位数。
log10(n!)=log10(123……*n)=log10(1)+log10(2)+……+log10(n)
log10(n) 表示的是以10为底n的对数
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
long long n;
long double ans=0;
cin>>n;
for(long double i=1;i<=n;i++){
ans+=log10(i);
}
cout<<(int )(ans+1)<<endl;
return 0;
}
斯特林公式
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
long double pi=3.1415926;
long double e=2.71828182;
int main()
{
long long n,ans;
cin>>n;
ans=(long long )((0.5*log(2*pi*n)+n*log(n)-n)/log(10));
cout<<ans+1<<endl;
return 0;
}