Mathematician Takeover 的题解


记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。

作者: admin

概述

本题要求计算给定实数 x 的以 2 为底的对数 \log_2(x)。核心解法是使用换底公式或语言内置的 \log_2 函数,直接得到正确答案。

分析
核心观察

题面说明样例给出的是数学家眼中的 \log,即自然对数 \ln(x),但正确目标输出是计算机科学家眼中的 \log,即二进制对数 \log_2(x)。

思路

根据换底公式,有:

\displaystyle  \log_2(x) = \frac{\ln(x)}{\ln(2)}

因此只需计算 x 的二进制对数。大多数编程语言的标准数学库都提供 \log_2 函数,可以直接调用。若使用换底公式,注意分母 \ln(2) 是常数。

具体示例

对于样例输入 x = 1.234,正确输出应为 \log_2(1.234) \approx 0.30336。而题面给出的样例输出 0.21026 是 \ln(1.234),验证了样例与正确目标的差异。

算法步骤
  1. 读取实数 x。
  2. 计算 ans = \log_2(x)。
  3. 输出 ans,保留足够的小数位数。
复杂度分析

时间:O(1) 空间:O(1)

实现注意事项
  • 输入保证恰好三位小数,使用 double 或 float 即可满足精度要求。
  • 输出误差需不超过 10^{-4},建议输出至少 10 位小数。
  • C++ 中 \log_2 函数位于 <cmath> 头文件,需要 C++11 或更高版本。
  • Python 中可使用 math.log2 函数。
  • 注意不要误用自然对数 \ln 或常用对数 \log_{10}。
源代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    double x;
    cin >> x;
    cout << fixed << setprecision(10) << log2(x) << endl;
    return 0;
}
import math

x = float(input())
print(f"{math.log2(x):.10f}")

评论

目前没有评论。