leetcode-326. 3的幂
数学问题
题目详情
给定一个整数,写一个函数来判断它是否是 3
的幂次方。如果是,返回 true
;否则,返回 false
。
整数 n
是 3
的幂次方需满足:存在整数 x
使得 n == 3^x
示例1:
输入:n = 27
输出:true
示例2:
输入:n = 0
输出:false
示例3:
输入:n = 9
输出:true
示例4:
输入:n = 45
输出:false
思路:
第一种方法: 利用对数。设 logn3 = m,如果 n 是 3 的整数次方,那么 m 一定是整数。
class Solution
{
public:
bool isPowerOfThree(int n)
{
//logn3 = log10(n) / log10(3)
//fmod(n, 1)判断n是否是整数,是就返回0
return fmod(log10(n) / log10(3), 1) == 0;
}
};
另一种投机取巧法:因为在 int 范围内 3 的最大次方是 3^19 = 1162261467,如果 n 是 3 的整数次
方,那么 1162261467 除以 n 的余数一定是零;反之亦然。
class Solution
{
public:
bool isPowerOfThree(int n)
{
return n > 0 && 1162261467 % n == 0;
}
};