题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
示例 2:
输入: 16
输出: true
示例 3:
输入: 218
输出: false
(来源:力扣(LeetCode))
思路:很明显,对于这道题我们只需要将输入的数不断除以2(假设除了n次),然后看2的n次幂是否等于原数即可。
代码:
bool isPowerOfTwo(int n)
{
int N;
int cnt=0;
N=n;
if(n<=0)
return false;
while(n!=1)
{
n/=2;
cnt++;
}
if(pow(2,cnt)==N)
return true;
else
return false;
}
事实上,这题还有更简便的方法。考虑到
2^x(记为n) | 2^x-1 | n&(n-1) |
(1)10=(0001)2 | (0)10=(0000)2 | (0001)&(0000)=0 |
(2)10=(0010)2 | (1)10=(0001)2 | (0010)&(0001)=0 |
(4)10=(0100)2 | (3)10=(0011)2 | (0100)&(0011)=0 |
(8)10=(1000)2 | (7)10=(0111)2 | (1000)&(0111)=0 |
…… | …… | …… |
bool isPowerOfTwo(int n)
{
return n>0&&(n&(n-1))==0;
}