【问题标题】:I'm can't quite wrap my head around this code for checking for a perfect square我不能完全围绕这段代码来检查一个完美的正方形
【发布时间】:2017-06-09 01:16:53
【问题描述】:

显然,我是个新手,在我的学校学习高级 c++,我正在做家庭作业,当我偶然发现如何确定整数是否是完美平方时遇到了问题在这段代码中。

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

    return sqrt(num);

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

【问题讨论】:

  • static_cast&lt;int&gt;(sqrt(num)) 是一种写“num 平方根的下限”的方法,希望对您有所帮助。
  • 拿一张纸和一支铅笔。现在选择一个数字,并将其代入公式,看看会发生什么。尝试随机数和“完美平方”的数字,例如 36 或 49。您很快就会找到自己的答案。

标签: c++ number-theory


【解决方案1】:

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

sqrt(num) 将返回一个可能有小数的数字,static_cast&lt;int&gt;(sqrt(num))) 将返回一个整数。

如果数字有小数, static_cast&lt;int&gt;(sqrt(num))) 将去掉小数点。例如,如果转换的值是

4.32

静态转换会取出小数并返回

4

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

如果平方根不等于去掉小数的平方根,那么它不是一个完美的平方

再次以数字 4.32 为例

if( sqrt(num) != static_cast&lt;int&gt;(sqrt(num)) )

会变成

if( 4.32 != static_cast&lt;int&gt;(4.32))

会变成

if(4.32 != 4)

【讨论】:

  • 非常感谢您。我还应该指出,当涉及到一些数学问题时,我有点生疏,但试图让自己回到一个好的点。这个解释非常有道理,我现在可以完全理解了。谢谢你帮助我理解。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多