0
点赞
收藏
分享

微信扫一扫

【牛客 - 185F】 假的数学游戏(斯特林公式,大数Java打表)

泠之屋 2022-06-20 阅读 47

题干:

【牛客 - 185F】 假的数学游戏(斯特林公式,大数Java打表)_数据

 

输入描述:

第一行:一个整数X

输出描述:

第一行:一个整数N

 

示例1

输入

复制

7

输出

复制

10

备注:

每个测试点所对应的X满足:

第i个测试点输入的值为第i-1个测试点输入的值乘以10再加上7。

特别的,第一个测试点所输入的值为7。

提示:数据共有10组。

解题报告:

   可以斯特林公式打表(因为数据都已知了,7,17,177,1777.....可以Java大数打表),也可以直接二分。 这里提供两种二分方法。

【牛客 - 185F】 假的数学游戏(斯特林公式,大数Java打表)_数据_02

AC代码:

#include<bits/stdc++.h>
typedef long long ll;

using namespace std;
const double pi = acos(-1), e = exp(1.0);
ll x;
double up;
bool check(double n){
return 0.5 * log(2 * pi * n) + n * log(n / e) >= up;
}
int main() {
scanf("%lld",&x);
up = x * log(x);
int times = 51;
double l = 1, r = 1e13, ans;
while(times--) {
ll mid = (l + r) / 2;
if(check(mid)) ans = mid, r = mid;
else l = mid;
}
cout <<(long long )ans;
return 0;
}

AC代码2:

#include<bits/stdc++.h>
#define ll long long
using namespace std;

int main() {
ll x;
cin>>x;
ll l=x,r=x*3,mid;
while (l<r) {
mid=(l+r)/2;
if (log(mid*1.0)*mid-mid+log(x)-1<x*log(x)) l=mid+1;
else r=mid;
}
cout<< l << endl;
return 0;
}

 


举报

相关推荐

0 条评论