輸入一個整數,求該整數的二進制表達中有多少個 1。c++
例如輸入 10,因爲其二進制表示爲 1010,有兩個 1,所以輸出 2。編程
解法一是普通處理方式,經過除二餘二統計1的個數;
spa
解法二與解法一相似,經過向右位移依次處理,每次與1按位與統計1的個數code
解法三比較奇妙,每次將數字的最後一位處理成0,統計處理的次數,進而統計1的個數io
#include "stdio.h" #include "stdlib.h" int count1(int x); int count2(int x); int count3(int x); int main(void) { int x; printf("輸入一個數:\n"); setbuf(stdin,NULL); scanf("%d",&x); printf("%d轉二進制中1的個數是:",x); printf("\n解法一:%d",count1(x)); printf("\n解法二:%d",count2(x)); printf("\n解法三:%d",count3(x)); printf("\n"); return 0; } //除2、餘二依次統計每位 int count1(int x) { int c=0; while(x) { if(x%2==1) c++; x/=2; } return c; } //向右移位,與1按位與統計每位 int count2(int x) { int c=0; while(x) { c+=x & 0x1; x>>=1; } return c; } //每次將最後一個1處理成0,統計處理次數 int count3(int x) { int c=0; while(x) { x&=(x-1); c++; } return c; }
參考資料:編譯
《編程之美》 電子工業出版社class