1. 程式人生 > >如何判斷一個數是完全平方數

如何判斷一個數是完全平方數

bool isSqr(int n)
{
    int a = (int)(sqrt(n) + 0.5);  //四捨五入求整,又學到一招
     return a * a == n;
}

bool isSqr(int n)
 {
     int a = (int)(sqrt(n) + 0.0001);
     return a * a == n;
 }
 bool isSqr(int n)
 {
     int a = (int)sqrt(n * 1.0);
     if(a*a == n || (a+1)*(a+1) == n || (a-1)*(a-1) == n)
         return true;
     return false;
 }
 bool isSqr(int n)
 {
     int a = (int)(sqrt(n * 1.0));
     return a * a == n;
 }

個人傾向於使用第一種寫法. 第二種和第一種其實差不多.
第三種, 需要判斷(a-1)*(a-1) == n 嗎? 我覺得不需要.
第四種, 基本上是錯誤的, 可能會漏掉某些完全平方數. 除非sqrt(n) >= n^0.5 恆成立

晚上突然想到,第一種方法中為什麼要四捨五入求整呢?一個數如果是另一個整數的完全平方,那麼我們就稱這個數為完全平方數,所以這裡就完全不需要四捨五入取整了,不過用四捨五入求整也不影響結果。。。思考ing