B4001 [GESP202406 一级] 立方数
欢迎报名洛谷网校,期待和大家一起进步!
:::align{center} :::
本题介绍两种做法。
- 枚举法。使用循环结构,让
i 从1,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 的无解情况
- 数学函数法。需要头文件
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";