閱讀123 返回首頁    go 阿裏雲 go 技術社區[雲棲]


劍指Offer之二進製中1的個數

題目描述:

輸入一個整數,輸出該數二進製表示中1的個數。其中負數用補碼表示。

輸入:

輸入可能包含多個測試樣例。
對於每個輸入文件,第一行輸入一個整數T,代表測試樣例的數量。對於每個測試樣例輸入為一個整數。
。n保證是int範圍內的一個整數。

輸出:

對應每個測試案例,
輸出一個整數,代表輸入的那個數中1的個數。

樣例輸入:
3
4
5
-1
樣例輸出:
1
2
32


【解析】:



/*********************************
*   日期:2013-11-18
*   作者:SJF0115
*   題號: 題目1513:二進製中1的個數
*   來源:https://ac.jobdu.com/problem.php?pid=1513
*   結果:AC
*   來源:劍指Offer
*   總結:
**********************************/
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;

int NumberOfOne(int n){
    int flag = 1;
    int count = 0;
    while(flag){
        if(flag & n){
            count++;
        }
        flag = flag << 1;
    }
    return count;
}

int main()
{
	int i,n,num;
	while(scanf("%d",&n) != EOF){
        for(i = 0;i < n;i++){
            scanf("%d",&num);
            printf("%d\n",NumberOfOne(num));
        }
	}
    return 0;
}




另一種方法:




int NumberOfOne(int n){
    int count = 0;
    while(n){
        count++;
        n = (n-1) & n;
    }
    return count;
}




最後更新:2017-04-03 14:54:08

  上一篇:go [Qt教程] 第11篇 2D繪圖(一)繪製簡單圖形
  下一篇:go 初次接觸:DirectDraw