Meine Projektmission ist herauszufinden, ob eine ganze Zahl die Potenz von drei ist. Mein Code kann 0, 1, 3,9,27,81 Testfälle, aber 243 übergeben. Und wenn ich versuche, zum Debuggen auszudrucken, fand ich eine komische Sache. Wenn ich 243 eingabe, drucke ich log3 (243), es gibt mir 5.0, was korrekt ist. Aber ich habe versucht, log3 (243)% 1 zu drucken, es gibt mir 0,999999999999, was so komisch ist.Swift isPowerofThree kann nicht passieren 243
class Solution {
func isPowerOfThree(n: Int) -> Bool
{
//print("log3(n): \(log3(Double(n)))")
if n == 0
{
return true
}
if n == 1
{
return true
}
//print("weird here: \(log3(Double(n)) % 1)")
if log3(Double(n)) % 1 == 0.0
{
return true
}
//print("log3: \(log3(Double(n)))")
//print("floor log3: \(floor(log3(Double(n))))")
//print("log3: \(Int(log3(Double(n))))")
return false
}
func log3(val: Double) -> Double
{
return log(val)/log(3.0)
}
}
var test = Solution()
var result = test.isPowerOfThree(243)
print(result)
http://stackoverflow.com/questions/4915462/how-should-i-do-floating-point-comparison –
Ausführliche Informationen hierzu finden Sie unter [Was jeder Informatiker wissen sollten über Gleitkommatypen Arithmetik] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – NobodyNada