数论的又一个又简单但是骚的不行的题,有点像一道菜:番茄炒蛋,谁都会炒,但是,如何炒的好吃,入口即惊艳,是非常困难的。
就我这智商,必须得先学人家怎么写,所以,学到了一个新奇的判定方法。
原题是这样的:
Given an integer, write a function to determine if it is a power of two.
描述的很简单吧?嗯,下面来看一种判定方法:
按位 与 操作
n&(n-1),比如,4的二进制是100,4-1,也就是3的二进制是011,4和3的二进制按位与操作是000
然后,这样一个n&(n-1)的结果判断一下是否等于==0,就可确定是不是2的幂次了。
所以结果就是:
return ((n&(n-1))==0)
所以,代码就是:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0)
{
return false;
}
return ((n&(n-1))==0);
}
};