题解 AT989 【立方数】

· · 题解

C++并没有直接提供开立方根的函数,但是我们可以借助math库中的pow()函数实现开立方。

大家都知道,一个数X的立方根可以表述为这个数的1/3次方,而在pow()函数中,底数和指数是可以在有效域内任意指定的,为了对底数X开立方,我们可以调用pow(X,1.0/3.0)实现。

但是请注意,pow存在精度的问题,计算出的值可能稍高于或稍小于实际值,因此不能直接使用int()取整(比如:int(pow(1000000,1.0/3.0))返回的值为99,而不是真值100),为了解决这个问题,我们可以采用round()函数四舍五入取整。

代码:

#include <iostream>
#include <cmath>
using namespace std; //头文件和命名空间
int main(){
    ios::sync_with_stdio(false); //输入输出加速
    int iNum,iRoot; //分别为原始数和取整的立方根
    cin >> iNum; //读入原数
    iRoot = round(pow(iNum, 1.0 / 3.0)); //开立方,四舍五入取整
    if (iRoot*iRoot*iRoot == iNum) //判断是不是真实值
        cout << "YES\n"; //真
    else //否则
        cout << "NO\n"; //假
    return 0; //结束
}