#includeiostream using namespace std; //第一种方法利用循环 bool makedecision(const int m,int pow) //pow表示m是2的多少次幂 { int i=2; int s=1; pow=0; if(m0) return false; if(m==0) return true; do { s*=i; pow; }while(sm); if(s==m) return tru
#include
using namespace std;
//第一种方法利用循环
bool makedecision(const int& m,int &pow) //pow表示m是2的多少次幂
{
int i=2;
int s=1;
pow=0;
if(m if(m==0) return true;
do
{
s*=i;
pow++;
}while(s if(s==m) return true;
else
{
pow=0;
return false;
}
}
//第二种方法,如果m/2是2的整数次幂,那么m就是2的整数次幂,递归实现
bool makedecision(int m,int *pow)
{
if(m if(m%2!=0) return false;
if(m==0) return true;
else if(m==2)
{
*pow=*pow+1;
return true;
}
else
{
*pow=*pow+1;
makedecision(m/2,pow);
}
}
//一个是2的整数次幂的整数,它的第0,1,2...都是1,而其余位都是0,这样-m的补码有1位1的位置和m的补码1的位置是相同的
//因此m & -m 就是m
bool makedecision(int& m)
{
return m == (m & (-m));
}
void main()
{
cout int m;
cin>>m;
int pow=0;
//if(makedecision(m,&pow)) cout if(makedecision(m)) cout else cout}
