链接:https://www.nowcoder.com/acm/contest/185/F
来源:牛客网
输入一个整数X,求一个整数N,使得N!恰好大于XX。
输入描述:
第一行:一个整数X
输出描述:
第一行:一个整数N
示例1
输入
7
输出
10
备注:
每个测试点所对应的X满足: 第i个测试点输入的值为第i-1个测试点输入的值乘以10再加上7。 特别的,第一个测试点所输入的值为7。 提示:数据共有10组。
这道题考察斯特林公式的应用,关于斯特林公式我们可以参考一下这篇博客斯特林公式,然后我们为了继续缩小搜索范围我们可以对方程两边同时log一下,最好以e为底,之前一直以10为底样例总是过90%,然后我们设定好上界和下界,通过不断缩小上界找出最小值。
#include <bits/stdc++.h>
using namespace std;
#define pi acos(-1.0)
#define e exp(1)
int main(){
long long x;
while(~scanf("%lld",&x)){
long long left = 1, right = 1e12;
long long minn = 1;
double ans = log10(x)*x;
while(left <= right){
long long mid = (left + right) / 2;
if(log10(sqrt(2*pi*mid)) + mid*log10(mid/e) > ans){
minn = mid;
right = mid - 1;
}
else left = mid + 1;
}
printf("%d\n",minn);
}
return 0;
}