用python判斷乙個數是否為2的n次方

2021-10-06 05:54:20 字數 1347 閱讀 4222

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 最簡單的就是轉換成字串,然後判斷。但是本題要求不使用額外的空間 你也可以考慮將數字反轉,但是這樣的話,好像很容易溢位哦 所以,這裡肯定有乙個好辦法。希望你能夠想出來哦 格式 輸入有若干行,每一行輸入對應一行輸出,直到遇到終止...