Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
個人博客:http://www.cnblogs.com/wdfwolf3/
這道題本身沒有難度,這裡只是介紹兩種思路,當我們判斷出它二進制只有1個1的時候,即必為2的冪時,如何進一步判斷它是不是4的冪。
1. 8ms
class Solution {
public:
bool isPowerOfFour(int num) {
if(num<=0)
return false;
if((num&(num-1))!=0) //判斷是不是2的冪,或者說二進制是否只有1個1
return false;
if((num-1)%3==0) //判斷這個1的位置,來判斷是不是4的冪
return true;
return false;
}
};
為什麼要利用num-1後能不能整除3判斷,很多人各種數學證明,其實從二進制角度很好理解證明。num減1後得到的數字末尾全為1,3的二進制是……11,那麼從最低位算起有偶數個1的數字都能整除3,奇數個不能整除。自然4的冪減1後為偶數個1。
2. 8ms
class Solution {
public:
bool isPowerOfFour(int num) {
if(num<=0)
return false;
if((num&(num-1))!=0)
return false;
int con=0x55555555;
if((num&con)!=0)
return true;
return false;
}
};
這裡利用了一個數字0x55555555,它是01010101……01010101。4的冪二進制中的1的位置一定出現在0x55555555二進制1的位置,那麼按位與操作後等於0說明位置不對,那就不是4的冪。