LeetCode342. 4的幂

给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false

思路:循环, 注意边界值 1

bool isPowerOfFour(int num) {
    if(num < 1){
        return false;
    }
    while(num > 1){
        if(0 != num % 4){
            return false;
        }
        num = num / 4;
    }
    return true;
}

不用循环思路:
数字4幂的二进制类似于100,10000,1000000形式。
可以有如下结论:
4的幂一定是2的。
4的幂和2的幂一样,只会出现一位1。但是,4的1总是出现在奇数位。
0x5 = 0101b可以用来校验奇数位上的1。

//0x5 = 0101b
bool isPowerOfFour(int num) {
    if (num <= 0 || num & (num-1)){//check(is or not) a power of 2.
        return false;
    } 
    return num & 0x55555555;//check 1 on odd bits
}

猜你喜欢

转载自blog.csdn.net/qq_34595352/article/details/87979211