第一种方法,暴力穷举
#include <iostream>
using namespace std;
int main()
{
int num;
int temp=1,flag=0;
cin>>num;
while(temp<=num)
{
if(temp==num)
flag=1;
temp*=2;
if(flag==1)
{
cout<<"该数是2的整数次幂";
break;
}
}
return 0;
}
第二种方法就是把每次乘2的操作变成移位,比上述优化一点点;
第三种方法就厉害了,通过二进制位的表达发现,一个数如果是2的整数次幂,那么 它与它的前一位数相与为0
实现的代码只有一行
bool is(int n)
{
return (n&n-1)==0;
}