统计一个整数二进制中1的个数
输入一个非负整数num,对于每一个i,0<=i<=num,计算i的二进制表示中,有几个‘1’,例如输入num=5,输出0,1,1,2,1,2。
#include<iostream>usingnamespacestd;//解法1intcountOne(intnum){intcount=0;while(num){//当最后一位为1时,则加1if(num&1){++count;}num>>=1;}returncount;}/*解法2,比如当二进制中的1只有一个时,num&(num-1)会等于0,以此判断即可。*比如:00000100*&00000011*=00000000*/intcountOne2(intnum){intcount=0;while(num){num&=(num-1);++count;}returncount;}intmain(intargc,char*argv[]){inti,num;cout<<"请输入num:"<<endl;cin>>num;cout<<"解法一:"<<endl;for(i=0;i<=num;i++){cout<<countOne(i)<<",";}cout<<endl;cout<<"解法二:"<<endl;for(i=0;i<=num;i++){cout<<countOne2(i)<<",";}return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。