我不能完全围绕这个代码来检查一个完美的方块

时间:2017-06-09 01:16:54

标签: c++ number-theory

我是一个明显的新手,在我的学校的高级c ++中,我正在从事家庭工作,并且遇到问题,当我偶然发现时,试图弄清楚如何判断一个整数是否是一个完美的正方形跨过这段代码。

if (num <= 0 || sqrt(num) != static_cast<int>(sqrt(num)))
      throw "Error: The number is not a perfect square.\n";

    return sqrt(num);

如果可能作为异常函数,我只是不太明白||之后的作品作品。并且只想知道以备将来参考。

2 个答案:

答案 0 :(得分:2)

最后一部分检查数字是否为整数。

sqrt(num)将返回一个可能包含小数的数字,static_cast<int>(sqrt(num)))将返回一个整数。

如果数字有小数, static_cast<int>(sqrt(num)))将取小数。如果铸造值是例如

4.32

静态强制转换将取出小数并返回

4

if语句检查数字的平方根是否与取出小数的版本相同

如果平方根不等于取出小数的平方根,那么它就不是一个完美的正方形

以4.32为例再次

if( sqrt(num) != static_cast<int>(sqrt(num)) )

将变成

if( 4.32 != static_cast<int>(4.32))

将变为

if(4.32 != 4)

答案 1 :(得分:1)

sqrt(num)返回平方根作为浮点数。 static_cast将尝试将返回值转换为整数,这将成功并将值截断为整数。如果num是一个完美的正方形,那么它就不会做任何事情,价值也会相等。