如何判斷一個數是完全平方數
阿新 • • 發佈:2019-01-02
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