給定一個整型數,寫一個函數決定它是否是3的冪(翻譯可能不太合適……
跟進:
你是否可以不用任何循環或遞歸來完成。
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
題意我其實不是滿懂,比如說12到底可不可以呢?還是說只有:3、9、27、81這種才行呢?先寫個簡單的遞歸試試看吧。
bool isPowerOfThree(int n) {
if (n == 1) return true;
else if (n == 0) return false;
else if (n % 3 == 0)
return isPowerOfThree(n / 3);
else return false;
}
提交成功了,那麼自己用12作為參數來試試呢,發現返回false,那麼就可以斷定題意是上面我說的第二種了。
是否還記得log函數呢,之前有一道題遇到過,所以這次一下就想到了……
如果以12來計算的話:
所以直接判斷結果是否為0就好了……
bool isPowerOfThree(int n) {
double logAns= log(n) / log(3);
return (logAns- int(logAns) == 0) ? true : false;
}
然而這段代碼提交後發現仍然是錯誤的,243在上面的代碼中居然是false,打斷點看看應該是由於精度問題,所以繼續改改。
所以代碼就出來了……
class Solution {
public:
bool isPowerOfThree(int n) {
double logAns = log10(n) / log10(3);
return (logAns - int(logAns) == 0) ? true : false;
}
};