学习笔记9:计算n个正整数对应二进制中1的个数

【描述】
给定一个十进制正整数,求其对应的二进制数中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;
}

题目暂无老师指导,如语句有所不妥,还望指出,谢谢。

猜你喜欢

转载自blog.csdn.net/qq_49868778/article/details/110288234
今日推荐