【描述】
给定一个十进制正整数,求其对应的二进制数中1的个数。
【输入】
第一个正整数表示有n(n> 0)个测试数据,其后n行是对应的测试数据,每行为一个正整数。
【输出】
分行输出n个正整数对应的二进制数中1的个数。
【输入示例】
4
2
100
1000
66
【输出示例】
1
3
6
2
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int *sum=(int *)calloc(n,sizeof(int)); //分配内存空间
//百度一下
//原型:void* calloc(unsigned int num,unsigned int size);
//功能:在内存的动态存储区中分配num个长度为size的连续空间;
int a;
int index=1;
while(index<=n) //循环n次
{
scanf("%d",&a); //输入各个数
sum[index]=0; //赋初始值
do
{
sum[index]+=a%2; //取余,算1的个数
a/=2; //算二进制嘛,懂得都懂
}while(a>0); //直到除尽为0
index++; //下标变化
}
for(int i=1;i<=n;i++)
{
printf("%d\n",sum[i]); //输出个数二进制含1个个数
}
free(sum); //释放内存
return 0;
}
这个在istudy里好像只有部分通过,我裂开了.
这个可以通过
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf("%d",&n);
int sum[n];
int a;
int b=1;
int c=1;
while(b<=n)
{
scanf("%d",&a);
sum[b]=0;
do
{
sum[b]+=a%2;
a/=2;
}while(a>0);
b++;
}
for(int i=1;i<=n;i++)
{
printf("%d\n",sum[i]);
}
return 0;
}
题目暂无老师指导,如语句有所不妥,还望指出,谢谢。