1.题目
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
给一个整数,判断是否为3的幂。不用迭代和递归,如何实现。
2.分析
一开始我走错了方向,以为3的n次方有什么规律。实际上,确实有,但通过这一规律并不是充分条件,只是必要条件。
3的n次方满足:尾数为3,9,7,1。
后来还是看了solution,大致分为两种解法:
1)求解log3(n),结果是整数则n为3的幂
2)找出32位int表示范围内的最大的3的幂1162261467。所有int范围内的3的幂都能整除1162261467。
3.代码
求log3(n)=log(n)/log(3)
bool isPowerOfThree(int n) {
return fmod(log10(n) / log10(3), 1) == 0;
}
所有int范围内的3的幂都能整除1162261467
bool isPowerOfThree(int n) {
int max_pow = 1162261467;
if (n <= 0 || n > max_pow)
return false;
return max_pow%n == 0;
}