可能是重复问题:
确定整数的平方根是否为整数的最快方法
如何判断一个数字是不是完全平方数?
bool IsPerfectSquare(long input)
{
// TODO
}
我正在使用C#,但这是语言无关的。
如果能够更加清晰简洁,就会得到额外的分数(这不是代码竞赛)。
编辑:这比我预料的要复杂得多!双精度问题表现出来的方式有几种。首先,Math.Sqrt采用double类型,无法精确保存long类型(感谢Jon)。
其次,在你有一个巨大的、接近完美平方的数时,double类型的精度会丢失小的值(.000...00001)。例如,我的实现未通过Math.Pow(10, 18)+1的测试(我的实现报告为true)。