Description
给定一个十进制整数N,求其对应2进制数中1的个数。
Input
第一个整数表示有N组测试数据,其后N行是对应的测试数据,每行为一个整数。
Output
N行,每行输出对应一个输入。
Sample Input
4
2
100
1000
66
Sample Output
1
3
6
2
方法一:
#include<stdio.h>
int main(){
int n,N,c;
scanf("%d",&N);
while(N--){
c=0;
scanf("%d",&n);
while(n!=0){
if(n%2==1) c++;
n/=2;
}
printf("%d\n",c);
}
}
方法二:
#include<stdio.h>
#include<string.h>
int main(){
int N,n,i,k;
int a[10000]={0};
scanf("%d",&N);
while(N--){
for(i=0;i<10000;i++){
a[i]=0;
}
scanf("%d",&n);
i=0;
while(n>0){
a[i]=n%2;
n=n/2;
i++;
}
k=0;
for(i=0;i<10000;i++){
if(a[i]!=0){
k++;
}
}
printf("%d\n",k);
}
}
本文介绍了一种算法,用于计算任意十进制整数转换为二进制后的1的数量。通过两种方法实现,一种是直接除以2并判断余数,另一种是将数字转换为二进制数组再进行计数。适用于初学者理解和实践二进制转换及位运算。
2356

被折叠的 条评论
为什么被折叠?



