题目描述
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x
示例 1:
输入:n = 27
输出:true
示例 2:
输入:n = 0
输出:false
示例 3:
输入:n = 9
输出:true
示例 4:
输入:n = 45
输出:false
提示:
-231 <= n <= 231 - 1
进阶:
你能不使用循环或者递归来完成本题吗?
解题思路
我的思路是统计输入数字3进制形式下1的个数,若换算成的3进制串只有1个1,则为3的幂,否则不是
代码
bool isPowerOfThree(int n){
int count=0;
while(n){
count+=n%3;
n/=3;
}return count==1?true:false;
}
不使用循环
class Solution {
public:
bool isPowerOfThree(int n) {
if(n<=0)return false;
double result=log10(n)/log10(3);//换底公式
return result == floor(result);//floor函数判断result(即log3(n))是否为整数
}
};