判断一个数是不是2的整数次幂(两种方法)

方法一:

拿这个数来除以2,得到商和余数,再用商除以2,又得到商和余数,重复上面的操作,直到商为0,当商为0,余数也为0时,这个数就是2的整数次幂当商为0,余数不为0时,这个数就不是2的整数次幂。

程序如下:

#include <iostream>

using namespace std;


int fun(int n)

{

    if(n==1)

        return 1;

    else

    {

        do

        {

            if(n%2==0)

                n/=2;

            else

                return 0;

        }

        while(n!=1);

        return 1;

    }

    return 0;

}


int main()          //根号2的故事--判断一个数是不是2的整数次幂

{

    int n;

    while(cin>>n)

    {

        if(fun(n)==1)

            cout<<"ACM"<<endl;

        else

            cout<<"MCA"<<endl;

    }

    return 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;

}


猜你喜欢

转载自blog.csdn.net/zhaoguanghui2012/article/details/80981273