1058 N的阶乘的长度
基准时间限制:1 秒 空间限制:131072 KB 分值: 0
难度:基础题
输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。
Input
输入N(1 <= N <= 10^6)
Output
输出N的阶乘的长度
Input示例
6
Output示例
3
//思路因为是N!的位数,所以直接求出log10(N!)就可以算出多少位-1;
//第一种解法
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[10000000];
int main()
{
ll n;
while(cin>>n)
{
int i;
long double ans = 1;//注意这里是双精度;
for(i = 1; i <= n; i++)
ans += log10(double(i));//lg(1*2)==lg1+lg2;
long long x = ans;
cout << x << endl;
}
return 0;
}
根据斯特林公式求解//https://baike.baidu.com/item/%E6%96%AF%E7%89%B9%E6%9E%97%E5%85%AC%E5%BC%8F/9583086?fr=aladdin
sqrt(2*Pi*n)*(n/e)^n;/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define p1 3.1415926
#define e 2.71828182
ll a[10000000];
int main()
{
ll n;
while(cin>>n)
{
double k;
k=log10(sqrt(2*p1*n))+n*log10(n/e);
ll m=k;
cout<<m+1<<endl;//log算出来的是位数-1就像log10(10)=1;但是10是两位
}
return 0;
}