输入一个非负整数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;}