30

可能重复:
确定输入是否为完美正方形的好算法是什么?

我想要检查数字的最短和最简单的方法是 C# 中的完美正方形

一些完美的正方形:

1, 4, 9, 16, 25, 36, 49, 64, 81, 100, ......
4

4 回答 4

51

可能会检查数字的平方根是否有小数部分,或者它是否是整数。

在实施方面,我会考虑这样的事情:

double result = Math.Sqrt(numberToCheck);
bool isSquare = result%1 == 0;

isSquare现在应该true适用于所有方格和false所有其他方格。

于 2011-02-03T12:10:03.720 回答
6

这是检查平方根是否为整数的变体:

bool IsPerfectSquare(double input)
{
    var sqrt = Math.Sqrt(input);
    return Math.Abs(Math.Ceiling(sqrt) - Math.Floor(sqrt)) < Double.Epsilon;
}

Math.Ceiling将向上舍入到下一个整数,而Math.Floor将向下舍入。如果它们相同,那么你有一个整数!

这也可以写成 oneliner:

if (int(Math.Ceiling(Math.Sqrt(n))) == int(Math.Floor(Math.Sqrt(n)))) /* do something */;
于 2011-02-03T12:14:17.860 回答
4
    public bool IsPerferctSquare(uint number)
    {
        return (Math.Sqrt(number) % 1 == 0);
    }
于 2011-02-03T12:26:49.993 回答
2
public bool IsPerfectSquare(int num)
{
   int root = (int)Math.Sqrt(num);
   return (int) Math.Pow(root,2) == num;
}
于 2011-02-03T12:12:04.107 回答