首页 > 试题广场 >

查找输入整数二进制中1的个数

[编程题]查找输入整数二进制中1的个数
  • 热度指数:165186 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的整数 nm,分别求解他们在二进制表示下的 1 的个数。

输入描述:
\hspace{15pt}第一行输入一个整数 n\left(0 \leqq n \lt 2^{31}\right) 代表需要求解的第一个数字。
\hspace{15pt}第二行输入一个整数 m\left(0 \leqq m \lt 2^{31}\right) 代表需要求解的第二个数字。


输出描述:
\hspace{15pt}第一行输出一个整数,代表 n 在二进制表示下的 1 的个数。
\hspace{15pt}第二行输出一个整数,代表 m 在二进制表示下的 1 的个数。
示例1

输入

5
0

输出

2
0

说明

\hspace{15pt}十进制 05 的二进制表示如下:
\hspace{23pt}\bullet\,十进制 (0)_{10} 等于二进制 (0)_{2}
\hspace{23pt}\bullet\,十进制 (1)_{10} 等于二进制 (1)_{2}
\hspace{23pt}\bullet\,十进制 (2)_{10} 等于二进制 (10)_{2}
\hspace{23pt}\bullet\,十进制 (3)_{10} 等于二进制 (11)_{2}
\hspace{23pt}\bullet\,十进制 (4)_{10} 等于二进制 (100)_{2}
\hspace{23pt}\bullet\,十进制 (5)_{10} 等于二进制 (101)_{2}

备注:
\hspace{15pt}本题数据已进行规范,不再需要读入至文件结尾(2025/01/09)。
#include <stdio.h>

int main() {
    int n;

    while(scanf("%d", &n) != EOF){
        int cnt = 0;
        while(n){
            if(n & 0x01){
                cnt++;
            }
            n = n >> 1;
        }
        printf("%d\n", cnt);
    }
    return 0;
}

编辑于 2024-03-01 10:46:45 回复(0)
#include <stdio.h>
int main() {
    int n, sum =0;
    while (scanf("%d",&n)!= EOF) {
        sum = 0;
        while (n>0) {sum += n&1;n = n>>1;}
        printf("%d\n",sum);
    }
    return 0;
}

编辑于 2023-12-03 19:32:08 回复(0)
#include <stdio.h>

int main() {
    int num;
    while (scanf("%d", &num) != EOF) {
        int count = 0;
        while(num)
        {
            num = num&(num-1);
            count++;
        }
        printf("%d\n",count);
    }
    return 0;
}
发表于 2023-10-12 11:15:19 回复(0)
#include <stdio.h>

int count_1(int n) {
    
    int num = 0;
    while(n){
        if((n & 1) == 1){
            num ++ ;
        }
        n >>= 1;
    }
    return num;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        printf("%d\n",count_1(n));
    }
}

发表于 2023-04-12 20:13:36 回复(0)
本题和之前有一道题目是类似的,但是本题测试中给的是多组用例,也就是说相比之前的题多了一些格式控制
#include <stdio.h>

int main() {
    int n;
   
    while(scanf("%d",&n)!=-1){
        int count=0;
        while(n){
            if(n&0x01)
                count++;
            n=n>>1;
        }
        printf("%d\n",count);
    }
    return 0;
}
发表于 2023-01-01 15:02:03 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int n;
    int count = 0;  
    while(scanf("%d",&n)!=EOF)
    {
        count = 0;
        do{
            count+= n&0x01; 
        }while((n>>=1)>0);
        printf("%d\n",count);
    } 
    return 0;
}
发表于 2022-06-18 15:34:44 回复(0)
#include <stdio.h>
#define    N    100
int main()
{
    int n,arr[N],i=0,cnt;
    while(scanf("%d",&n)!=EOF)
    {
        cnt=0;
        while(n>0)
        {
            cnt+=n&0x01;
            n>>=1;
        }
        arr[i++]=cnt;
    }
    for(cnt=0;cnt<i;cnt++)
        printf("%d\n",arr[cnt]);
    return 0;
}

发表于 2022-04-23 21:14:08 回复(0)
#include <stdio.h>
int main()
{
    int a;
    while (scanf("%d", &a) != EOF) 
    {
        int count = 0;
        while(a)
        {
            a&=(a-1);
            count++;
        }
        printf("%d\n",count);
    }
    return 0;
}

发表于 2022-04-07 14:43:38 回复(0)
#include <stdio.h>
int main(){
    int num;
    while(scanf("%d\n",&num)!=EOF){
        int count=0;
        while(num){
            count++;
            num=num&(num-1);
        }
        printf("%d\n",count);
    }
    return 0;
}
发表于 2022-03-22 19:58:56 回复(0)
C语言,迭代的思想;不断让n /= 2,
当循环过程中的n不等于1,
    看n%2是不是等于1:等于1则,ret += 1;
                                  :不等于1则,ret += 0;
当循环过程中的n等于1,说明已经除到最后一步了,ret += 1;

最后输出ret。

#include <stdio.h>

int main()
{
    int n;
    int ret;
    while(scanf("%d\n",&n) != EOF)
    {
        ret = 0;
        while(n != 1)
        {
            if(n%2 == 1){ret += 1;}
            
            else    {ret += 0;}
            n /= 2;
        }
        ret += 1;
        
        printf("%d\n",ret);
    }
}

发表于 2022-02-03 16:36:03 回复(0)
#include <stdio.h>

int main()
{
    int num = 0;
    
    while(scanf("%d",&num) != EOF)
    {
        int cnt = 0;
        while(num/2 > 0)
        {
            if(1 == num % 2) cnt++;
            num = num/2;
        }
        cnt++;
        printf("%d\n",cnt);
    }
    
    return 0;
}

发表于 2021-09-03 14:09:46 回复(0)
#include<stdio.h>

int main()
{
    int num,cnt;
    while(scanf("%d",&num)!=EOF)
    {
        cnt=0;
        while(num>0)
        {
            if(num%2==1)
                cnt++;
            num = num/2;
        }
        printf("%d\n",cnt);
    }
    
}

发表于 2021-08-21 18:50:22 回复(0)

为了扣题,使用了>>向右的位运算

#include<stdio.h>
#include<math.h>
int count(int in){
    int num=0;
    while(in >3){
        if((in % (in = in >> 1)) >=1){
            num++;
        }
    }
    if(in == 3){
        num = num + 2;
    }else if(in == 2){
        num = num + 1;
    }
    return num;
}
int main(){
    int in;
    while(scanf("%d", &in) != EOF){
        if(in == 0 || in == 1){
            printf("%d\n", in);
        }else{
            printf("%d\n", count(in));
        }
    }
}
发表于 2021-07-30 21:47:05 回复(1)
#include <stdio.h>
#include <math.h>
int main()
{
    int c,n;
    int z;
    while(z=(scanf("%d",&c))!=EOF){
        n=0;
        for(;c>=1;c=c/2)
        
            if(c%2==1)
            {
                n=n+1;
            
            }
        printf("%d\n",n);
    }
    return 0;

}
发表于 2021-07-25 22:36:15 回复(0)

问题信息

难度:
15条回答 27053浏览

热门推荐

通过挑战的用户

查看代码
查找输入整数二进制中1的个数