判斷乙個十進位制正整數是不是2的冪

2021-08-18 09:00:57 字數 1306 閱讀 4919

description

hry進入大學之後學習了二進位制,有一天他遇到這樣乙個問題,判斷乙個十進位制正整數是不是2的冪?

input

第一行是乙個正整數t,表示有t組測試資料。 每組測試資料有一行乙個正整數n。

(1<=t<=10000,1<=n<=1000000000000000000)

output

每組測試資料輸出一行,如果n是2的冪,輸出yes,否則輸出no.

sample input

512

345

sample output

yes

yesno

yesno

解題思路:

這裡我們注意到,如果乙個十進位制正整數n是2的冪的話,那麼他寫成二進位制形式之後,只有一位為1,其餘位都為0。這裡我們用位運算,將n減去1,則n-1在在原來為1的那一位為0,之後所有位全為1。因此,如果n為2的冪的話,將n跟n-1用位與運算之後,所得結果的二進位制表示應該全為0,即十進位制也為0。因此這是乙個很有效的判定條件。

c++**:

#include

using namespace std;

int main()

else

}return 0;

}/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*******

problem: 2580

language: c++

result: accepted

time:112 ms

memory:1484 kb

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

****/

數值轉換 十進位制正整數轉二進位制

今天朋友去面試,問到一基礎題,實現正整數到二進位制的轉換。因為對基礎掌握的不牢,此題並未能做出正確解答。我在給他講解一番後,他恍然大悟。對於十進位制正整數到二進位制的轉換其實很簡單,用2輾轉相除至結果為1,將餘數和最後的1從下向上倒序寫,就是整數所對應的二進位制值。例如5的二進位制就是101 如圖 ...

PHP操作十進位制正整數中的bit位

php 根據十進位制整數得到置為1的二進位制位 function get bit set pos int return arr 設定整數中指定的bit位 function set bit pos int,pos int pow 2,pos 1 return int else 設定整數中指定的多個bi...

判斷乙個數是不是2的整數次冪

用位運算 二進位制數的位權是以2為底的冪,如果乙個整數 m 是 2 的 n 次冪,那麼轉換為二進位制之後只有最高位為 1,其餘位置為 0,再觀察 m 1 轉換為二進位制後的形式以及 m m 1 的結果,例如 2 0000 0010 1 0000 0001 2 1 0000 0010 0000 000...