首页 > 试题广场 >

如何判断一个整数是2的整数次幂?用伪代码表示。

[问答题]
如何判断一个整数是2的整数次幂?用伪代码表示。
我们知道2的n次方的二进制只有最高位是1,其余为0,减1后最高位向后借位为0,其余为1。因此将原来的数与减去1后的数字进行与运算后会发现为零。
发表于 2020-02-18 23:11:30 回复(0)

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。

如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。

最快速的方法:

(number & number - 1) == 0

程序如下:
#include <iostream>
using namespace std;

int main()          //判断一个数是不是2的整数次幂
{
    int n;
    while(cin>>n)
    {
        if((n&(n-1))==0)    //此处注意运算符的优先级,“==”比“&”优先级高
            cout<<"ACM"<<endl;
        else
            cout<<"MCA"<<endl;
    }
    return 0;
}

发表于 2020-02-24 11:58:48 回复(0)
  • int temp=1;
  • while(temp<=num){
  • if(temp==num){
  • cout<<"is"<<endl;
  • break;
  • }
  • else{
  • cout<<"NO"<<endl;
  • break;
  • }
  • temp=temp<<1;//左移运算符
  • //例如:8<<1=8*2=16
  • //8<<2=8*2*2=32
  • }
  • 发表于 2020-09-14 15:35:07 回复(0)

    转化成二进制

    发表于 2020-02-13 22:35:30 回复(0)