公式转化+二分答案
首先,把题目中给的等式转化一下,变成了这个样子。
等式右边的值是可以求出来的。
ln(x)/x的大致图像是这样的
那么只要对[0,e]和[e,+∞]分别进行二分答案即可。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; double Y,k;
const double e=2.71828182845904523536; int main()
{
while(~scanf("%lf",&Y))
{
k=(+log(Y))/(e*Y);
int flag=;
double l=,r=e;
double mid=(l+r)/;
if(k>1.0/e) {
printf("Happy to Women’s day!\n");
continue;
}
if(Y==)
{
printf("2.71828\n");continue;
}
while()
{
if(fabs(log(mid)/mid-k)<0.000000000001)
{
flag=;
printf("%.5lf ",mid);
break;
}
if(log(mid)/mid>k)
{
r=mid;
mid=(l+r)/;
}
else
{
l=mid;
mid=(l+r)/;
}
if(fabs(l-r)<0.000000000001) break;
} l=e,r=;
mid=(l+r)/; while()
{
if(fabs(log(mid)/mid-k)<0.00000000001)
{
flag=;
printf("%.5lf\n",mid);break;
}
if(log(mid)/mid<k)
{
r=mid;
mid=(l+r)/;
}
else
{
l=mid;
mid=(l+r)/;
}
if(fabs(l-r)<0.000000000001) break;
}
if(!flag) printf("Happy to Women’s day!\n");
}
return ;
}