这个问题是这里帖子的后续:Fastest way to determine if an integer's square root is an integer,What's a good algorithm to determine if an input is a perfect square? .
那里的一个帖子有这个解决方案来查找给定的数字是否为perfect square
:
public final static boolean isPerfectSquare(long n)
{
if (n < 0)
return false;
switch((int)(n & 0xF))
{
case 0: case 1: case 4: case 9:
long tst = (long)Math.sqrt(n);
return tst*tst == n;
default:
return false;
}
}
这是一个简洁的解决方案,并且工作得非常好。但没有解释它是如何工作的,更重要的是,没有详细解释这个解决方案是如何得出的。我想知道这个解决方案是如何得出的。