2
true
我的**如下:n =
int(
input()
)if n &
(n -1)
==0:print
('true'
)else
:print
('false'
)
我的思路
看到這個問題首先想到的就是迴圈來做,應該能做出來,不過要是數字較大估計記憶體會溢位。
轉換為二進位制,轉換幾個看看規律
for i in
range(0
,10):
print
(bin(2
** i)
)結果:
0b10b10
0b100
0b1000
0b10000
0b100000
0b1000000
0b10000000
0b100000000
0b1000000000
可以很明顯的觀察出來,如果乙個數是2的n次方,那麼將這個數轉換為二進位制再轉換為字串其中只有乙個1。於是我找到了了這樣的方法:
n =
str(
bin(n)
)if n.count(
'1')==1
:print
('這個數是2的n次方'
)
但是,如果只是這樣子的話從程式設計的角度來講健壯性太差
我們可以在深入的觀察一下:
for i in
range(0
,10):
print
(bin(2
** i -1)
)結果:
0b00b1
0b11
0b111
0b1111
0b11111
0b111111
0b1111111
0b11111111
0b111111111
得到規律:如果乙個數字i為2的n次方,則 i&(i-1)=0。
注:& :按位與運算子:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0。
當然還需要做一些判斷和異常處理,不過這裡記錄一下方法,也就不用關心那些細節了。
綜合了運算子和判斷的乙個有趣的例子,回顧了一下二進位制的計算。解決問題之後的喜悅讓人感覺不錯,繼續努力,總會有成長的不是麼?
你可以的!你總是這樣相信著自己!
Python判斷乙個數是否為小數
一 判斷乙個數是否為小數 1 有且僅有乙個小數點 2 小數點的左邊可能為正數或負數 3 小數點的右邊為正數 二 實現 def is float str if str.count 1 小數有且僅有乙個小數點 left str.split 0 小數點左邊 整數字,可為正或負 right str.spli...
判斷乙個數是否為回文數
問題描述 輸入乙個數值判斷是否為回文數 回文數是指乙個像12321 123321這樣 對稱 的數 解題思路 將數值的各個位存放在陣列中,若陣列中元素左右對稱,則為回文數,反之不是 設定 left 陣列最左邊下標 right 陣列最右邊下標 首先判斷第乙個和最後乙個數值是否相等,若相等,left ri...
判斷乙個數是否為回文數
判斷乙個數字是否位回文,不能使用額外的空間。負數可能是回文嗎?123321 最簡單的就是轉換成字串,然後判斷。但是本題要求不使用額外的空間 你也可以考慮將數字反轉,但是這樣的話,好像很容易溢位哦 所以,這裡肯定有乙個好辦法。希望你能夠想出來哦 格式 輸入有若干行,每一行輸入對應一行輸出,直到遇到終止...