劍指offer系列5 二進位制中1的個數

2022-04-03 02:22:24 字數 1083 閱讀 8846

先說下原碼,反碼和補碼的概念。在計算機中用第一位表示數的正負,正數為0,負數為1。所有正數的這三個碼相等。對於負數來說,這三個碼都不影響其符號位。反碼給所有位取反,補碼給反碼加1。

看完題目我的思路是輸入乙個數n,先通過迴圈判斷找到乙個數k,使得2的k次方》=n,然後判斷等於的情況,如果相等,輸出1,如果不等於,計算n與2的k-1次方的差記作sig,則得到輸出為1+f(sig),**如下:

1 #include2 #include3 #include4

using

namespace

std;

5class

solution

13if (pow(2, i) ==n)

1417

else

2324}25

};26

intmain()

27

我自己測試結果是對的,結果報錯說超時了,emmmmmmm……

然後看了一下答案感覺好簡單,這是根據答案修改後的:

1

class

solution

11 n = n >> 1;12

}13return

count;

1415

}16 };

然鵝,還是超時……

1

class

solution

13 flag = flag << 1;14

}15return

count;16}

17 };

看了答案的思路真的超級簡單,只需要將n和n-1做與運算,即可消除該數字的最右邊的1,以此類推,等到最後乙個1消除了迴圈結束,這應該是這道題的最優解:

1

public:2

int numberof1(intn)3

10return

count;

11 }

stl有直接可以拿來用的函式,我……記住吧

1

class

solution

劍指Offer 擴充套件 二進位制 小公尺

世界上有10種人,一種懂二進位制,一種不懂。那麼你知道兩個int32整數m和n的二進位制表達,有多少個位 bit 不同麼?輸入例子 1999 2299 輸出例子 7 分析 將兩個整數逐位進行比較,累加不同位的個數,直至兩個數都為0.比較兩個數的最後一位,然後分別右移一位,直至兩個數都為0.defin...

劍指Offer系列15 二進位制中1的個數

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000000...

劍指Offer 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。1 可能引起死迴圈的解法 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷最右邊的...