problem:
Given an integer, write a function to determine if it is a power of two.
Example 1:
Input: 1
Output: true
Explanation: 20 = 1
Example 2:
Input: 16
Output: true
Explanation: 24 = 16
tip:
判断一个数是否是2的次方数.
solution:
1.这种和数字有关的,首先想位操作的方法.1(1),2(10),4(100),8(1000),16(10000)…可以发现每一个数都只有一个1,所以每次右移一位,判断它有几个1即可.
class Solution {
public:
bool isPowerOfTwo(int n) {
int cnt=0;
while(n>0)
{
cnt += (n&1);
n>>=1;
}
return cnt==1;
}
};
2.如果一个数是2的次方数,它的二进制表达形式的最高为1,它此时减1后,最高位变成0,其他位为1,则减1后的数与上这个数值为0,利用这个性质也可以.
class Solution {
public:
bool isPowerOfTwo(int n) {
return (n>0)&&(!(n&(n-1)));
}
};