2017-04-09 31 views

回答

0

嘗試這樣:

var number = 9.0 

let root = sqrt(number) 
let isInteger = floor(root) == root 
print("\(root) is \(isInteger ? "perfect" : "not perfect")") 

那 「isInteger」 位我發現in this related question

1

您可以轉換的整數翻倍,獲得其對squareRoot財產,繞着它和比較反對其對squareRoot:

extension Integer { 
    var double: Double { return Double(toIntMax()) } 
    var isPerfectSquare: Bool { 
     return double.squareRoot().rounded() == double.squareRoot() 
    } 
} 

遊樂場

4.isPerfectSquare  // true 
7.isPerfectSquare  // false 
9.isPerfectSquare  // true 
(-9).isPerfectSquare // false 
+0

爲任何代價,你認爲它應該拋出一個錯誤 - 例如南 - ?或者返回'false'就足夠了? –

+0

這是一個布爾真或假,你可以添加一個先決條件,但返回false我認爲這是足夠的 –