B4001 [GESP202406 一级] 立方数

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

:::align{center} :::

本题介绍两种做法。

  1. 枚举法。使用循环结构,让 i1,2,3,\dots 一直循环到 n。在这个过程中,如果发现了 i\times i\times i=n 的情况,那么就是存在这么一个正整数,也就是说 n 是立方数。如果没发现这样的 i,说明 n 不是立方数。

参考代码(部分):

for (int i = 1; i <= n; i++) {
    if (i * i * i == n) {
        cout << "Yes";
        flag = true; //有解
    }
}
//还需判断 flag == false 的无解情况
  1. 数学函数法。需要头文件 cmath。在 C++ 中提供了开立方根的函数 cbrt(n),用于计算 n 的立方根。我们使用整型变量 x 令其为 cbrt(n) 的结果。如果 x\times x\times x=n,那么说明 n 是个立方数。这里使用整型变量是用于 cbrt(n) 的小数部分,只有 cbrt(n) 恰为整数结果的时候 n 才是立方数。如果不知道 cbrt 函数,也可以使用 pow(n, 1.0 / 3) 表示 n^\frac{1}{3},也即 \sqrt[3]{n}

参考代码(部分):

int x = cbrt(n);
if (x * x * x == n)
    cout << "Yes";
else
    cout << "No";