//循环版本
public static bool IsPowerOfThree(int n) {
if (n == 1) {
return true;
}
double num = n;
bool isPower = false;
while (num >= 1) {
num = num / 3;
if (num == 1 && num == (int)num) {
return true;
}
}
return isPower;
}
//递归版本
public static bool IsPowerOfThree(int n) {
if (n == 1) {
return true;
} else if (n == 0 || n % 3 > 0) {
return false;
} else {
return IsPowerOfThree(n / 3);
}
}
最后还有一种巧妙的方法,利用对数的换底公式来做,高中学过的换底公式为log
a
b = log
c
b / log
c
a,那么如果n是3的倍数,则log
3
n一定是整数,我们利用换底公式可以写为log
3
n = log
10
n / log
10
3,注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错,原因请看
这个帖子
。现在问题就变成了判断log
10
n / log
10
3是否为整数,在c++中判断数字a是否为整数,我们可以用 a - int(a) == 0 来判断,参见代码如下:
class Solution {
public:
bool isPowerOfThree(int n) {
return (n > 0 && int(log10(n) / log10(3)) - log10(n) / log10(3) == 0);
}
};