题目大意
如题。。记得某次实验室周赛的时候做过这道题。那个时候直接打表过的,因为最多只有31种可能。现在依然打表→_→ 但是看到了别人的一种特别巧妙的做法,就保存一下。
代码
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && !(n&(n-1));
}
};
算法原理
如果一个数是2的幂(0除外),其最高位必定是1,而且其他位一定是0。这个数减去1,最高位变成0,其他位都变成1。所以,两个数按位与的结果一定是0。另外,数字0和任何数相与结果也是0。这个规律适用于任何是2的幂的数。