1. 程式人生 > >領釦刷題--342:4的冪

領釦刷題--342:4的冪

題目描述如下:

給定一個整數 (32 位有符號整數),請編寫一個函式來判斷它是否是 4 的冪次方。

示例 1:

輸入: 16
輸出: true

示例 2:

輸入: 5
輸出: false

分析如下:這個 可以聯絡我的上篇文章,關於2的冪,這裡是關於4的冪,可以看一下,2的冪,4的冪,8的冪,16的冪

都有什麼規律呢,2--->10,4-->100,8-->1000,16-->10000......觀察一下,4 和16 的奇數位為1,2和8是偶數位為1,所以,我們就可以保留奇數去掉偶數,所以我們需要找一個篩選器,而最好的篩選器就是0101,偶數為0奇數為1(從後向前)所以程式碼如下

class Solution {
public:
    bool isPowerOfFour(int num) {
        if(num<=0)
            return false;
        else
            return ((num&(num-1))==0&&(num&0x55555555));
    }
};

前面的num&(num-1)用來選出2的冪,後面的0x55555555是一個int32 位長度的篩選器,如果不好理解,可以當作一種程式設計技巧,記住,然後推廣出去,培養這種思維,之後再慢慢的形成自己的思想。