题解 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; //结束
}