【LeetCode-数学】3的幂
题目描述
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例:
输入: 27
输出: true
输入: 45
输出: false
进阶: 你能不使用循环或者递归来完成本题吗?
题目链接: https://leetcode-cn.com/problems/power-of-three/
思路1
将 n/3,如果最后能的结果为 3,则说明 n 是 3 的幂,返回 true,否则返回 false。在每次 n 除以 3 之前,还要判断 n 能不能被 3 整除,如果不能直接返回 false。
代码如下:
class Solution {
public:
bool isPowerOfThree(int n) {
if(n==1 || n==3) return true;
while(n>=3){
if(n%3!=0) return false;
if(n==3) return true;
n /= 3;
}
return false;
}
};
思路2
如果 n 是 3 的幂,则有
\[n = 3^a \\
\log n = a \log 3 \\
a = \frac{\log n}{\log 3}
\]
根据上面的公式计算 a,如果 n 是 3 的幂,则 a 是整数,否则 a 不是整数。
class Solution {
public:
bool isPowerOfThree(int n) {
if(n<=0) return false;
double a = log10(n) / log10(3);
return a==floor(a);
}
};