程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> How many '1's are there題解,there題解

How many '1's are there題解,there題解

編輯:關於C語言

How many '1's are there題解,there題解


Description:

Description:

第一行輸入數字n(n<=50),表示有n組測試用例,第2到第n+1行每行輸入數m(m為整數),統計並輸出m用二進制表示時,1的個數。

例如:m=9時,二進制表示為1001,則輸出2.

Input:

2

3

7

Output:

2

3


 

 

Hint:

利用位運算


一道比較簡單的題目,其中也可以有高深的做法。雖然提示位運算,但因為不熟悉所以並沒有用位運算。  
有錯誤的代碼:(被電腦管家直接視為間諜軟件給kill掉了。。)不太懂錯的地方,先貼出來吧
#include <stdio.h>
int main() {
    int binary[20];
    int count = 0;
    int one = 0;  
    int n, i, num;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        count = 0;
        one = 0;
        scanf("%d", &num);
        while (num != 0) {     
            binary[count] = num % 2;   
            num /= 2;
            count++;
        }
        for (i = count-1; i >= 0; i--) {   
            if (binary[i] == 1)
            one++;  
        }
        printf("%d\n", one);
    }
}

最後通過的代碼:

#include <stdio.h>
int main() {
    int binary[20];
    int n, i, num, j;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        int count = 0;
        int one = 0;
        scanf("%d", &num);
        while (num != 0) {
            binary[count] = num % 2; 
            if (binary[count] == 1) {
                one++;
            }
            num /= 2;
            count++;
        }
        printf("%d\n", one);
    }
}

標答:

#include<stdio.h>
 
int bitcount(int x) {
        int count = 0;
        while (x != 0) {
                x &= (x-1);
                count++;
        }
        return count;
}
 
int main() {
        int num;
        int x;
        scanf("%d", &num);
 
        while (num--) {
                scanf("%d", &x);
                printf("%d\n", bitcount(x));
        }
        return 0;
}

 

聽說有一個函數

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved