description
hry進入大學之後學習了二進位制,有一天他遇到這樣乙個問題,判斷乙個十進位制正整數是不是2的冪?input
第一行是乙個正整數t,表示有t組測試資料。 每組測試資料有一行乙個正整數n。output(1<=t<=10000,1<=n<=1000000000000000000)
每組測試資料輸出一行,如果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...