輸入1個數輸出其二進位制表示中1的個數

2021-06-06 03:36:16 字數 672 閱讀 4813

面試題。題目描述就是寫乙個函式,要求輸入乙個數,輸出其二進位制表示中1的個數。此處假設輸入的為int型。

方法一:首先想到的就是位運算,用移位得出每一位是否為1。**如下所示。

#include using namespace std;

int numberof1(int in)

return count;

}int main()

return count;

}

方法三:不直接取每一位的值,採用除以2取餘數,餘數相加即為所求,其它**不變,numberof1函式**如下所示。

int numberof1(int in)

return count;

}

方法四:採用位運算變相得出1的個數,其它**不變,numberof1函式**如下所示。

int numberof1(int in)

return count;

}

方法五:不使用迴圈,採用空間換取時間的策略,如32位機中int為32位,定義2的32次方大小的int型陣列,其中每個元素存對應序號的二進位制表示中1的個數。如此求輸入值的二進位制表示中1的個數就可以轉化成查表的方式來進行,查表的優化可以採用索引。

二進位制表示中1的個數

28.整數的二進位制表示中1的個數 運算 題目 輸入乙個整數,求該整數的二進位制表達中有多少個1。例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。分析 這是一道很基本的考查位運算的面試題。包括微軟在內的很多公司都曾採用過這道題。如果位數只有八位,使用查表法時間複雜度只有o 1 co...

二進位制表示中 1 的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。需要注意的是 右移運算子是將乙個二進位制數按指定移動的位數向右移動。移動過程中,正數最高位補0,負數最高位補1,無符號數最高位補0。因此 右移整數,遇到負數的測試序列會導致陷入死迴圈 if n 1 1 n n 1 考慮左移 1,按位與...

二進位制表示中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。1 int cnt 0 2 int cnt 0 3 while a 分析一下 這段小小的 很是巧妙。如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都...