如何判讀乙個整數是否是2的整數次冪 三種方法實現

2021-10-23 08:06:14 字數 1642 閱讀 7556

一、題目

二、解題方法

1、方法一

2、方法二

3、方法三

一、題目

實現乙個方法,判斷乙個正數是否是2的整數次冪。(如:8是2的3次冪,返回true,9不是,返回false)要求效能盡可能地高。

二、解題方法

1、方法一

暴力解法:設定乙個中間量temp=1,每次乘以2後和原資料比較,如果等於則返回true,否則繼續乘2。直到大於原資料,返回false。

時間複雜度為o(logn)

**實現:

def

is_power_of_2

(num)

: temp=

1while temp<=num:

if temp==num:

return

true

else

: temp *=

2return

false

print

(is_power_of_2(8)

)print

(is_power_of_2(9)

)

2、方法二

與方法一相同,只是把temp*2變成了temp向左移1位。(移位運算效率比較高)

這種方法其實並沒有實質性的提高效率,時間複雜度仍然為o(logn)

**實現:

def

is_power_of_2

(num)

: temp=

1while temp<=num:

if temp==num:

return

true

else

: temp=temp <<

1return

false

print

(is_power_of_2(8)

)print

(is_power_of_2(9)

)

3、方法三

我們可以把資料轉化為二進位制數來找尋特徵:

不管是2的任何次冪,其二進位制形式都是1******,只有最高為位為1,其他位全為0

在此基礎上,把原資料減1,就變成了111111的形式,二進位制數字全變成了1。

這個時候,我們讓n&(n-1),其結果必然為0

所以。判斷乙個數是否是2的整數次冪,就看是否滿足:n&(n-1)==0,滿足即是2的整數次冪,反之則不是

該方法的時間複雜度為o(1) 。

**實現:

def

is_power_of_2

(num)

:return num&

(num-1)

==0print

(is_power_of_2(8)

)print

(is_power_of_2(9)

)

python 是否是乙個整數

問題描述 輸入乙個字串,判別它是否符合整數的寫法。正整數的寫法是 用數字開頭,其後可以跟數字。負整數的寫法是 用負號開頭,其後跟數字。輸入的字串的頭尾可能包含空格。輸入形式 一行。乙個字串。輸出形式 yes或者no。如果符合整數寫法,輸出yes,否者輸出no。樣例輸入 897 樣例輸出 yes 樣例...

判斷乙個整數是否為素數 確定乙個整數是否是2的冪

給定乙個整數,編寫乙個函式來確定它是否是2的冪。範圍 1 2 31 1 測試用例 輸入 16,輸出 true 因為 2 4 16 輸入 18,輸出 false.最明顯的暴力方法就是除以2,然後檢查它是否達到1。var poweroftwo function n 由於給出的範圍在0 2 31 1之間,...

如何判斷乙個非負整數是否是2的冪

如何判斷乙個數是2的冪,主要是要找出2的冪次方的數的特點。我們知道,1個數乘以2就是將該數左移1位,而2的0次冪為1,所以2的n次冪 就是2的0次冪n次乘以2 就是將1左移n位,這樣我們知道如果乙個數n是2的冪,則其只有首位為1,其後若干個0,必然有n n 1 為0。在求1個數的二進位制表示中1的個...