#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<0) return false;

if(M==0) return true;

do

{

s*=i;

pow++;

}while(sif(s==M) return true;

else

{

pow=0;

return false;

}

}

//第二种方法,如果M/2是2的整数次幂,那么M就是2的整数次幂,递归实现

bool MakeDecision(int M,int *pow)

{

if(M<0) return false;

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<

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐