下面這段**都很熟悉吧?經典面試題目了。
#include
using namespace std;
int func(int x)
return count;
} int main()
答案解釋是:func函式返回形參x轉化成二進位制後包含1的數量。
開始我不是很理解,為什麼func函式能計算x包含1的數量?
其實是這樣:
對於任意的x,
轉換成二進位制後,是形如這樣的數字:aa...aa10...00,從右向左數有任意多個0,直到遇見第乙個1,字母a用來佔位,代表1左邊的任意數字。
x-1轉換成二進位制後,是形如這樣的數字:aa...aa01...11,從右向左數,原來的任意多個0都變成1,原來的第乙個1,變成0,字母a部分不變。
對x 和 x-1 進行 按位與 計算,會得到:aa...aa00...00,從右向左數,原來的第乙個1變成了0,字母a部分不變。
所以 x & (x-1)相當於消除了 x 從右向左數遇到的第乙個1。
那麼,x轉換成二進位制後包含多少個1,func函式裡的迴圈就會進行多少次,直到x所有的1都被「消除」。
這回明白了吧?
經典面試題(1)
要求 1.不能使用庫函式 2.只能開闢有限個空間 空間個數和字串的長度無關 演算法思路 先將字元陣列 student a am i 逆置變為 i ma a tneduts 然後在將字元陣列 i ma a tneduts 裡邊的每乙個單詞逆置變為 i am a student 如下 define cr...
HTTP協議 詳解 經典面試題
http請求由三部分組成,分別是 請求行 訊息報頭 請求正文 http 超文字傳輸協議 是乙個基於請求與響應模式的 無狀態的 應用層的協議,常基於tcp的連線方式,http1.1版本中給出一種持續連線的機制,絕大多數的web開發,都是構建在http協議之上的web應用。1 常用的http方法有哪些?...
HTTP協議 詳解 經典面試題
http請求由三部分組成,分別是 請求行 訊息報頭 請求正文 http 超文字傳輸協議 是乙個基於請求與響應模式的 無狀態的 應用層的協議,常基於tcp的連線方式,http1.1版本中給出一種持續連線的機制,絕大多數的web開發,都是構建在http協議之上的web應用。1 常用的http方法有哪些?...