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;

isSquaretrueこれで、すべての正方形とその他すべての正方形が対象になるはず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切り上げますが、切り捨てます。それらが同じであれば、まあ、あなたは整数を持っています!

これはワンライナーとして書くこともできます:

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 に答える