326. Power of Three
Easy
234892FavoriteShare
Given an integer, write a function to determine if it is a power of three.
Example 1:
Input: 27 Output: true
Example 2:
Input: 0 Output: false
Example 3:
Input: 9 Output: true
Example 4:
Input: 45 Output: false
Follow up:
Could you do it without using any loop / recursion?
这道题是给一个int,判断是否是3的幂,而且要注意follow up中要求不要使用循环。在提交时发现还会有溢出的情况,因此除了排除<=0的情况,还要排除大于32位int最大值和小于最小值的情况。
class Solution {
public:
bool isPowerOfThree(int n) {
if(n<=0)return false;
int max=0x7fffffff;
int min=0x80000000;
if(n>max||n<min)return false;
int k;
int big3;
k=log(max)/log(3);
big3=pow(3,k);//求在32位int范围内最大的3的幂,然后用这个数去除以n,看是否有余数。
//假设n=3^i,big3=3^k, k=i+j, big3/n=3^(k-i)=3^j
return((big3%n)==0);
}
};