C++计算输入数据对应二进制中1的个数。

来源:互联网 发布:安邦 华视网络 编辑:程序博客网 时间:2024/05/10 08:41

代码

1.使用C++中bitset类模板,计算

#include<iostream>#include<string>#include<bitset>using namespace std;int main(){    int c;    cout<<"Input  int data: "<<endl;    cin>>c;    bitset<sizeof(int)*8> a(c); //bitset输入数据以二进制的形式初始化a    cout<<a.count()<<"\n";//bitset操作,a中置为1的个数    return 0;}

2.使用经典java算法

#include<iostream>#include<string>#include<bitset>using namespace std;int getcount_one(int &a);int main(){    int data;    cout<<"Input int data: "<<endl;    cin>>data;    cout<<getcount_one(data)<<endl;    return 0;}int getcount_one(int &a){    int num = 0;      while(a)      {          a &= (a-1);  //输入的数据a,对应二进制最右边为1是第k位,则a-1后,第k位右边全为1,第k位为0,第k位左边数据保持不变。一次找到一个1,num++。        num++;    }    return num;}

3.利用移位思想试试

int getcount_one(int &a){    int num = 0;      while(a)      {          if((a&1)==1)num++;          a>>=1;//向右移一位,思想很简单,对应二进制最后一位是1,num+1,不是1就代表最后一位是0,循环右移一位    }    return num;}
0 0