将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。
如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。
最快速的方法:
(number & number - 1) == 0
#include <iostream> using namespace std; int main() //判断一个数是不是2的整数次幂 { int n; while(cin>>n) { if((n&(n-1))==0) //此处注意运算符的优先级,“==”比“&”优先级高 cout<<"ACM"<<endl; else cout<<"MCA"<<endl; } return 0; }