剣指Offer-9度1513-バイナリ中1の個数

4078 ワード

 Offer-9 1513-バイナリ 1の 
2013-11-29 23:35

タイトルの説明:
整数を入力し、その数のバイナリ表現の1つの数を出力します.ここで負数は補数で表される.
入力:
入力には、複数のテストサンプルが含まれる場合があります.各入力ファイルについて、最初の行には、テストサンプルの数を表す整数Tが入力されます.テストサンプルごとに整数として入力します.nはint範囲内の整数であることを保証する.
出力:
各テストケースに対応して、入力した数の1つを表す整数を出力します.
サンプル入力:
3

4

5

-1

サンプル出力:
1

2

32

   《 》 , :x & (-x),x & (x - 1)。
  x & (-x) lowbit , x ‘1’。
  x & (x - 1) x ‘1’。
   x ‘1’, x=0 。 O(log(x)), O(1)。
 1 // 651827    zhuli19901106    1513    Accepted     case     1020KB    350B    80MS

 2 // 201311151734

 3 #include <cstdio>

 4 using namespace std;

 5 

 6 int main()

 7 {

 8     int x;

 9     int res;

10     int n;

11     int i;

12     

13     while(scanf("%d", &n) == 1){

14         for(i = 0; i < n; ++i){

15             scanf("%d", &x);

16             res = 0;

17             while(x){

18                 x = (x & (x - 1));

19                 ++res;

20             }

21             printf("%d
", res); 22 } 23 } 24 25 return 0; 26 }