algorithm - majority - 摩尔投票法




什麼是確定輸入是否是完美正方形的好算法? (2)

可能重複:
確定整數的平方根是否為整數的最快方法

有什麼方法可以看出一個數字是否是一個完美的正方形

bool IsPerfectSquare(long input)
{
   // TODO
}

我正在使用C#,但這與語言無關。

獎勵點是為了清晰和簡單(這不是代碼高爾夫)。

編輯:這比我想像的要復雜得多! 事實證明,雙精度問題可以通過幾種方式表現出來。 首先,Math.Sqrt採用了一個不能精確控制的長度(感謝Jon)。

其次,當你擁有一個巨大的近乎完美的正方形時,雙精度將失去小值(.000 ... 00001)。 例如,我的實現未通過Math.Pow(10,18)+1的測試(我的報告為真)。


在Common Lisp中,我使用以下內容:

(defun perfect-square-p (n)
  (= (expt (isqrt n) 2)
     n))

bool IsPerfectSquare(long input)
{
    long SquareRoot = (long) Math.Sqrt(input);
    return ((SquareRoot * SquareRoot) == input);
}




perfect-square