求乙個數的臨近的較大的2的整數次冪

2022-06-19 15:33:11 字數 593 閱讀 2756

被面試官問了這麼一道題..........一問,想到,左移就好了。

就會很自然的寫下這種方法

unsigned int f2(unsigned int

val)

return

retval;

}

在改進一下,就判斷他是不是2的次方先。如果是的話,可以直接返回。就可以得到這種方法。面試官又說,不能用迴圈遞迴,函式庫。這下麻煩了。

unsigned int f1(unsigned int

val)

return leftmost << 1

; }

else

}

想想,如果乙個數,00101 如果能找到 00100的話就好了,這樣在左移一位就完事了,但是想得時候就想要求地00100的話,不就要迴圈了。然後就卡住了。

接著看到這個 

就得知,還可以這麼寫....溜到不行。把這個數,從高位數,第乙個1的右邊填滿,再加1...溜溜溜溜的。

unsigned int f3(unsigned int

val)

else

}}

求乙個數的整數次方

題目 求乙個數的整數次方。題目是如此的簡單,但是需要考慮的還是比較多 1.指數為負,底數是零 2.指數底數都是零 3.返回正常零和返回錯誤零的區別 4.底數為正,指數為負如何處理 5.考慮底數次方大的話,想效率問題 6.處理double數值相等問題 以下直接是 詳細考慮除底數指數全零的以上所有情況!...

求乙個數約數的個數

求約數的個數 計算乙個整數的約數個數 輸入格式 輸入乙個整數 輸出格式 輸出一行,為輸入整數的約數的個數 樣例輸入 10 樣例輸出 4ac import math number int raw input count 0 sqrt float math.sqrt number if number s...

求乙個數2進製中1的個數

include include int count one bits unsigned int value int i 0 int count 0 for i 0 i return count int main 方法2 進行32次迴圈,把這個數 1,把結果加到計數器,把這個數右移一位,直到退出迴圈。...