问题描述

Given an integer, write a function to determine if it is a power of two.

判断一个数是否为2的次方数

思路

  1. 当n>1时迭代,如果n%2!=0,即n不是2的倍数,直接false,否则令n=n/2,继续下一轮迭代。结束循环后,若n=1则为次方数。

  2. 如果为2的次方数,则二进制一定只有1个1(20=1),如果有多个1,则不是次方数。

代码

方法1:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        while(n>1) {
            if(n%2!=0) return false;
            n/=2;
        }
        if(n==1) return true;
        return false;
    }
};

方法2:

class Solution {
public:
    bool isPowerOfTwo(int n) {
    	int a = 0;
    	while(n>0) {
    		a += n&1;
	    	n >>= 1;
	    }
        return a==1;
    }
};