给定一个数n,快速计算n是2的几次幂
#include <iostream>
#include <cmath>
using namespace std;
/**
* 非递归 -- 判断一个数是2的几次幂
* @param n 给定的数
*/
int log(int n)
{
int count = 0;
if(n == 1)
return 0;
while(n > 1)
{
n = n>>1; //右移 -> 除以2的1次方
count++;
}
return count;
}
/**
* 递归 -- 判断一个数是2的几次幂
* @param n 给定的数
*/
int log2(int n)
{
int count = 0;
if(n == 1)
return 0;
return 1 + log2(n>>1);
}
int main()
{
int n, k;
cout<<"给定一个数:";
cin>>n;
k = log2(n);
if(n != pow(2, k))
cout<<n<<"不是2的幂次方数"<<endl;
else
cout<<n<<"是2的"<<k<<"次幂"<<endl;
return 0;
}