任何人都知道逻辑找出一个数字是完美的正方形还是没有?

时间:2011-06-30 12:36:20

标签: c#

  

可能重复:
  Fastest way to determine if an integer's square root is an integer

有人知道逻辑找出一个数字是完美的正方形吗? (Other than Newtons Method or Synthetic Division Method

For Eg:- 4, 16, 36, 64 are Perfect Squares.

我将以441的形式给出输入,逻辑应该说明它是否是完美的正方形。

这是亚马逊访谈中提出的一个问题。

我想完成任何内置函数

3 个答案:

答案 0 :(得分:18)

没有Math.Sqrt,甚至没有乘法:

    static bool IsSquare(int n)
    {
        int i = 1;
        for (; ; )
        {
            if (n < 0)
                return false;
            if (n == 0)
                return true;
            n -= i;
            i += 2;
        }
    }

注意,正方形是奇数整数的部分和。 i取值1,3,5,7 ......部分和1,1 + 3 = 4,1 + 3 + 5 = 9,...是正方形。因此,在n -= i之后,我们从n的原始值中减去了正方形,我们可以将结果与0进行比较。

答案 1 :(得分:3)

我要问采访者的第一个问题是,“问题的限制是什么?”也就是说,输入数量有多大?如果它足够小,那么你可以预先计算所有完美的sqaures并将它们存储在字典中:

IDictionary<long, bool> squares = new Dictionary<long, bool>;
for(long i = 1; i*i <= MAX_NUM; ++i) {
    squares[i*i] = true;
}

然后,要找出一个数字x是否是一个完美的正方形,你只需检查正方形[x]以查看它是否为真。

答案 2 :(得分:0)

根据这一点可行。

public Boolean IsSquare(double input)
{
    double root, product;
    Boolean isSquare,isGTInput;

    root = 1;
    product = 0;
    isSquare = false;
    isGTInput = false;

    while (!isSquare && !isGTInput)
    {
        product = root * root;
        if (product == input)
            isSquare = true;
        else if (product > input)
            isGTInput = true;

        root += 1;
    }

    return isSquare;

}