判斷乙個數是不是四的冪次

2021-06-09 22:44:54 字數 617 閱讀 5002

知道的大概有三種演算法

1)直接算,首先看這個num可不可以被四整除,可以的話除四,不可以返回false,一直到最後看是不是等於1,這種方法對於每個數都是通用的。

2)直接查詢,其實也很快,一共32位,每次把1左移兩位,一直移動15次就可以找到所以4的冪次了,感覺這樣速度很快,只要15次運算。而且對於一半的數都通用,一般的數假如是3,那麼就每次乘以三就好了。

3)分析,如果是四的冪次,肯定是把1向左移動偶數次得到的,那麼這個數有個特徵,在二進位制標識中只有乙個1,而且這個1的右面有偶數個0。速度很快,同樣也可以找2的冪次,8的冪次等,但3的公尺冪次等就不好用。

#include using namespace std;

int ispowerof4_1(int num)

if(num == 1)

return 1;

else

return -1;

}int ispowerof4_2(int num)

return -1;

}int ispowerof4_3(int num)

if(numofzero%2 == 0)

return 1;

}int main()

{ cout<

判斷乙個數是不是2的冪

將2的冪次方寫成二進位制形式後,很容易就會發現有乙個特點 二進位制中只有乙個1,並且1後面跟了n個0 因此問題可以轉化為判斷1後面是否跟了n個0就可以了。如果將這個數減去1後會發現,僅有的那個1會變為0,而原來的那n個0會變為1 因此將原來的數與去減去1後的數字進行與運算後會發現為零。最快速的方法 ...

判斷乙個數是不是2的冪

我們經常會遇到這樣乙個問題,就是判斷某個資料是否為2的n 次方 1,2,4,8,16.例如如果使用者輸入的不是 2 n,則要求使用者重新輸入。為了說明這種判斷演算法,我首先構造乙個測試程式,如下 include include int main end clock printf the total ...

無敵二次冪 如何判斷乙個數是不是2的冪數)

磊哥為測驗小凡的位運算知識,給小凡n個long long 型整數,磊哥問小凡其中有多少個2次冪數?輸入第一行輸入整數n.接下來n個long long 型整數。輸出輸出其中值為2次冪的數的個數。提示100 的資料滿足 1 n 6 000,000 n個正整數均保證是long long 型正整數。由於資料...