判断一个整数是不是2的整数次幂--小米某一笔试题

本文介绍了三种方法来判断一个给定的正整数是否为2的整数次幂:利用循环迭代的方法、递归实现的方法以及通过位运算的方法。详细解释了每种方法的工作原理,并提供了相应的代码实现。

#include<iostream>

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(s<M);
 if(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<<"输入一个大于0的整数:";
 int M;
 cin>>M;
 int pow=0;
 //if(MakeDecision(M,&pow)) cout<<M<<"是2的"<<pow<<"次幂"<<endl;
 if(MakeDecision(M)) cout<<M<<"是2的整数次幂"<<endl;
 else cout<<M<<"不是2的整数次幂!"<<endl;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值