自己的代码思路是:输入的数据对2循环取余和取商,记录余数为1的次数:
#include<stdio.h>
int main(){
int m,i;
while(scanf("%d",&m)!=EOF){
i=0;
while(m>0){
if(m%2==1) i++;
m/=2;
}printf("%d\n",i);
}
}
提交通过之后,翻看评论区学习其他小伙伴的思路,果然有效率更高的解法:
#include <stdio.h>
int main(int argc, char *argv[])
{
int num = 0;
int cnt = 0;
scanf("%d", &num);
while(num)
{
num = num&(num-1);
cnt++;
}
printf("%d", cnt);
return 0;
}