可能重复:
确定整数的平方根是否为整数的最快方法
有什么方法可以查看一个数字是否是一个完美的正方形?
bool IsPerfectSquare(long input)
{
// TODO
}
我正在使用 C#,但这与语言无关。
清晰和简单的加分点(这并不意味着代码高尔夫)。
编辑:这比我预期的要复杂得多!事实证明,双精度的问题体现在几个方面。首先,Math.Sqrt 需要一个不能精确保持长的双精度(感谢乔恩)。
其次,当你有一个巨大的、近乎完美的正方形时,双精度会丢失小的值(0.000...00001)。例如,我的实现未通过 Math.Pow(10,18)+1 的此测试(我的报告为真)。