这次碰上的问题更加奇葩.
需要求N次阶乘之后一共有多少位.
方法一,取log10既是N次阶乘的位数
又给定是阶乘,所以可以分解成log的加法运算.
代码如下
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f3f
double x;
int t,n;
int s[1000005];
int main()
{
//freopen("1.txt","r",stdin);
std::ios::sync_with_stdio(false);
for(int i=1; i<=1000005; i++)
{
x+=log10(i);
int ans= ceil(x);
s[i]=ans;
}
s[0]=1;s[1]=1;
while(cin>>n)
{
cout<<s[n]<<endl;
}
return 0;
}
第二种求法是斯特林公式,具体实现参照百度
第三种更加奇怪的姿势是转换精度变成double操作