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?
題意:給你一個數,判斷它是否爲3的冪。
程序中最好不採用任何循環和遞歸。
思路:下面給出兩種解法,第一種爲常規解法,採用循環。利用3的冪次方的數可表示爲: n = 1* 3^n;
第二種解法思路:32bit的整數中最大的3的冪次方數爲1162261476。那麼任何3的冪次方數 m與這個最大數有如下關係: 1162261467 = m * 3^n.
解法一(有循環,效率差):
bool isPowerOfThree(int n) {
if(n < 1)
return 0;
while( !(n%3) )
n /= 3;
return n == 1;
}
解法二(無循環):
bool isPowerOfThree(int n) {
return n > 0 && !(1162261467%n);
}