问题描述
Given an integer, write a function to determine if it is a power of two.
判断一个数是否为2的次方数
思路
-
当n>1时迭代,如果n%2!=0,即n不是2的倍数,直接false,否则令n=n/2,继续下一轮迭代。结束循环后,若n=1则为次方数。
-
如果为2的次方数,则二进制一定只有1个1(20=1),如果有多个1,则不是次方数。
代码
方法1:
class Solution {
public:
bool isPowerOfTwo(int n) {
while(n>1) {
if(n%2!=0) return false;
n/=2;
}
if(n==1) return true;
return false;
}
};
方法2:
class Solution {
public:
bool isPowerOfTwo(int n) {
int a = 0;
while(n>0) {
a += n&1;
n >>= 1;
}
return a==1;
}
};