【发布时间】:2010-09-25 12:34:13
【问题描述】:
可能重复:
Fastest way to determine if an integer's square root is an integer
查看数字是否为perfect square 的方法是什么?
bool IsPerfectSquare(long input)
{
// TODO
}
我使用的是 C#,但这与语言无关。
为清晰和简单加分(这并不意味着代码高尔夫)。
编辑:这比我预期的要复杂得多!事实证明,双精度的问题体现在几个方面。首先,Math.Sqrt 需要一个不能精确保持长的双精度(感谢乔恩)。
其次,当你有一个巨大的、近乎完美的正方形时,双精度将丢失小的值 (.000...00001)。例如,我的实现未通过 Math.Pow(10,18)+1 的此测试(我的报告为真)。
【问题讨论】:
-
有一个非常相似的问题。请参考stackoverflow.com/questions/295579/… 以获得出色的答案。
-
对于您选择的解决方案,不要忘记预先快速检查是否有负面影响。
-
是的,我把它放在那里,但为简洁起见将其删除。感谢您指出这一点
-
你也可以谷歌搜索用于整数平方根的 'lsqrt' 方法。
-
迈克尔,蜥蜴比尔提出了一个很好的观点,即这只是一个类似的问题,而不是完全相同的问题。我认为这个问题不需要结束。此外,完全平方的问题实际上比看起来要复杂得多,这里的答案做出了很大的贡献。
标签: algorithm math perfect-square