问题描述:判断n是否为2的幂次。
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0)
return false;
return ((n&(n-1))==0);//n&(n-1)去除n最低位的一个1
}
};
问题描述:判断一个数是否为3的幂。
class Solution {
public:
bool isPowerOfThree(int n) {
//注意:这种方法只适合于判断是否为某个素数的幂
//big3%n==0 则n为3的幂
//big3=3^k
//k=log(maxint)/log3
if(n<=0)
return false;
int maxint=0x7fffffff;
int k=log(maxint)/log(3);
int big3=pow(3,k);
if(big3%n==0)
return true;
return false;
}
};
问题描述:判断num是否为4的幂。
class Solution {
public:
bool isPowerOfFour(int num) {
if(num<=0)
return false;
//num & 0x55555555,即num & 0101 0101 0101 0101,结果只保留num的奇数位,即4的幂次方位。在((num&(num-1))==0成立保证了只有一个1,num&0x55555555保证了这个1在4的幂次方位。
return ((num&(num-1))==0 && num & 0x55555555);
}
};