现在有一个数n,这个n是整数。所以要把正整数和负整数考虑在内,现在问这个n是不是2
的幂
现在对n的取值进行讨论,画出二的幂函数,可以看到当n小于等于0时,x无取值,所以小于等于0的n不是2的幂。所以只需要讨论n大于0时的情况即可。下面是三种解决方案
1循环法
bool isPowerOfTwo(int n) { if (n <= 0) return false; while (n % 2 == 0) n /= 2; return n == 1; }2位运算
bool isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0; }原理:2 的幂的二进制只有一个 1,n & (n-1)会把最低位的 1 去掉,结果为 0。
3利用int_min
bool isPowerOfTwo(int n) { return n > 0 && (1 << 30) % n == 0; // 2^30 是 int 范围内最大的 2 的幂 }