先說下原碼,反碼和補碼的概念。在計算機中用第一位表示數的正負,正數為0,負數為1。所有正數的這三個碼相等。對於負數來說,這三個碼都不影響其符號位。反碼給所有位取反,補碼給反碼加1。
看完題目我的思路是輸入乙個數n,先通過迴圈判斷找到乙個數k,使得2的k次方》=n,然後判斷等於的情況,如果相等,輸出1,如果不等於,計算n與2的k-1次方的差記作sig,則得到輸出為1+f(sig),**如下:
1 #include2 #include3 #include4using
namespace
std;
5class
solution
13if (pow(2, i) ==n)
1417
else
2324}25
};26
intmain()
27
我自己測試結果是對的,結果報錯說超時了,emmmmmmm……
然後看了一下答案感覺好簡單,這是根據答案修改後的:
1class
solution
11 n = n >> 1;12
}13return
count;
1415
}16 };
然鵝,還是超時……
1class
solution
13 flag = flag << 1;14
}15return
count;16}
17 };
看了答案的思路真的超級簡單,只需要將n和n-1做與運算,即可消除該數字的最右邊的1,以此類推,等到最後乙個1消除了迴圈結束,這應該是這道題的最優解:
1public:2
int numberof1(intn)3
10return
count;
11 }
stl有直接可以拿來用的函式,我……記住吧
1class
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。接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷最右邊的...