Given an integer, write a function to determine if it is a power of three.
Example 1:
Input: 27 Output: true
Example 2:
Input: 0 Output: false
Example 3:
Input: 9 Output: true
Example 4:
Input: 45 Output: false
Follow up:
Could you do it without using any loop / recursion?
不使用循环或者递归来判断一个数是否是3的整数次方
解法一:使用log
public static boolean isPowerOfThree(int n) {
if (n <= 0)
return false;
// loga(b)/loga(c) = logc(b)
double r = Math.log10(n) / Math.log10(3); // r = ln(n)/ln(3) = log3(n)/log3(3) = log3(n)
// r是整数说明n是3的幂次,否则不是
return r%1==0;
}
解法二:有点搞笑...
public boolean isPowerOfThree(int n) {
if(n<=0) return false;
//1162261467是3的19幂(int范围内最大的3的幂次)
return 1162261467%n==0;
}