寫一個函數返回參數二進制中 1 的個數 比如: 15 0000 1111 4 個 1 程序原型: int count_one_bits(unsigned int val

寫一個函數返回參數二進制中 1 的個數
比如:15 二進制爲: 0000 1111 4 個 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位數
}

如果讓我們求一個十進制數中1 的個數,我們會將這個數除以10之後看餘數是不是1,然後將得到的商除以10看餘數是不是1,依次類推,直到商爲0.
如下圖解釋:
這裏寫圖片描述

那麼我們求二進制數的時候也一樣,將二進制除以2,看得到的餘數是不是1,再用商除以2,一直到商爲0爲止。
如圖:
這裏寫圖片描述

代碼如下:

#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
    int num = 0;
    while(value)//value爲0時跳出循環
    {
        if(value%2)//如果餘數爲1,則num自加1
            num++;
        value = value/2;//將得到的商再付給value
    }
    return num;
}
int main()
{
    int i = 0;
    int num = 0;
    printf("請輸入一個正數:");
    scanf("%d",&i);
    num = count_one_bits(i);//num爲記錄1 的個數
    printf("num=%d\n",num);
    system("pause");
    return 0;
}

結果:
這裏寫圖片描述

在這裏,還可以用位運算解這道題。
這裏寫圖片描述
代碼如下:

#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
    int  num = 0;
    while(value)
    {
        if( (value&1) ==1)
            num++;
        value>>=1;//右移
    }
    return num;
}
int main()
{
    int i = 0;
    int num = 0;
    printf("請輸入一個正數:");
    scanf("%d",&i);
    num = count_one_bits(i);
    printf("num=%d\n",num);
    system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章