首页 > 试题广场 >

求int型正整数在内存中存储时1的个数

[编程题]求int型正整数在内存中存储时1的个数
  • 热度指数:381391 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。

数据范围:保证在 32 位整型数字范围内

输入描述:

 输入一个整数(int类型)



输出描述:

 这个数转换成2进制后,输出1的个数

示例1

输入

5

输出

2
示例2

输入

0

输出

0
//直接利用十进制转换二进制的手动计算原理
#include <stdio.h>

int main() {
    int num;
    scanf("%d", &num);
    int count = 0;
    while(num != 0){
        if(num % 2 == 1) {
            count++;
        }
        num/=2;
    }
    printf("%d", count);
    return 0;
}
编辑于 2024-03-05 16:30:16 回复(0)
这种东西搞嵌入式的天天搞吧。。
#include <stdio.h>

int main() {

    int InputNum = 0,NumofOne = 0;
    scanf("%d",&InputNum);
    for(int i = 0;i < 32;i++)
    {
        if((InputNum >> i) & 1)
        {
            NumofOne++;
        }
    }
    printf("%d",NumofOne);
    return 0;
}

发表于 2024-01-08 10:35:06 回复(0)
#include <stdio.h>

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

编辑于 2023-12-24 14:58:18 回复(0)
#include <stdio.h>
int main() {
    int a,yu = 0,sum = 0;
    scanf("%d",&a);
    while(a>0) {yu = a%2; a = a/2; sum += yu;}
    printf("%d",sum);
    return 0;
}

发表于 2023-12-02 13:18:36 回复(0)
位运算
#include <stdio.h>

int main() {
int a, b = 0;
while (scanf("%d", &a) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
for(int i = 0;i <= 31;i++)
{
if((0x1<<i)&a)
b++;
}

printf("%d\n",b);
}
return 0;
}
发表于 2023-10-12 10:29:28 回复(0)
#include <stdio.h>

int main() {
    int n,count=0;
    scanf("%d",&n);
    while (n>0)
    {
        if(n%2!=0)
            count++;
        n/=2;

    }
    printf("%d",count);
    return 0;
}
发表于 2023-09-03 11:13:20 回复(0)
//利用除二取余法将十进制转换为二进制,判断余数为1的个数即可。
#include <stdio.h>
int main() {
   long int a;
   int n=0;
    scanf("%ld",&a);
    while(a!=0)
    {        
        if(a%2==1)
        n++;
        a=a/2;
    }
    printf("%d",n);
    return 0;
}
发表于 2023-07-29 11:10:52 回复(0)
利用二进制原理是吧整数分解成不同的二的次方项相加,得到要最高次方项后相减并计数即可逐步算出结果

#include <stdio.h>
#include <math.h>
int main()
{
    int n,m=0;
    scanf("%d",&n);
    for(int i=1;i<=32;)
    {
        if(n==0)break;
        if(pow(2,i)>n)
        {
        m++;
        n=n-pow(2,i-1);
        i=1;}
        else
        i++;
    }
    printf("%d\n",m);
    return 0;
}
发表于 2023-06-11 18:10:15 回复(0)
#include <stdio.h>

int main() {
    int num,count;
    while(scanf("%d",&num) != EOF){
        count = 0;
        while(num){
            if(num%2==1){
                count ++;
            }
            num /= 2;
        }
    }
    printf("%d",count);
    return 0;
}
发表于 2023-06-07 16:22:30 回复(0)
要用while做循环,for也行
#include <stdio.h>

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


发表于 2023-03-29 17:34:52 回复(0)
转化为进制问题,不用考虑输出,只用累加是1的量;
#include <stdio.h>

int main() {
    int n;
    scanf("%d" , &n);
    int num = 0;
    int z;
    do{
        z = n % 2;
        if(z == 1){
            num++;
        }
        n = n / 2;

    }while(n != 0);
    printf("%d" , num);
    return 0;
}



发表于 2023-03-15 10:41:30 回复(0)
#include <stdio.h>

int main() {
    int num;
    scanf("%d", &num);
    int c = 0;
    do{
        c += num&1;
        num = num >> 1;
    }while(num != 0);

    printf("%d", c);

    return 0;
}

发表于 2022-10-14 19:20:49 回复(0)
#include<stdio.h>
int main(){
    int num,count=0;
    scanf("%d\n",&num);
    
    while((num/2)!=0){
        if(num%2==1)
            count++;
        num=num/2;
    }
    count++;
    printf("%d",count);
    return 0;
}
发表于 2022-08-26 22:18:17 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n;
    scanf("%d",&n);
    int count = 0;
    while(n!=0)
    {
        if((n&0x00000001) == 1)
        {
            count++;
        }
        n = (n >> 1);
    }
    printf("%d\n",count);
    return 0;
}
发表于 2022-06-16 15:23:23 回复(0)
#include <stdio.h>

int main()
{
    int recv;
    scanf("%d",&recv);
    int num = 0;
    
    while(1)
    {
        if(recv & 0x01 == 0x01)
            num++;
        
        recv = recv >> 1;
        if(recv == 0)
            break;
    }
    printf("%d\n",num);
}

发表于 2022-05-22 23:54:37 回复(0)
#include<stdio.h>
int main()
{
    int ret,sum,i,j;
    int su[1000];
    scanf("%d",&ret);
    i=0;
    while(ret>0)
    {
        su[i]=ret%2;
        ret=ret/2;
        i++;
    }
    sum=0;
    for(j=0;j<i;j++)
    {
        sum+=su[j];
    }
    printf("%d",sum);
    return 0;
}
//变量起名字太难了

发表于 2022-05-10 20:13:14 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    int N;
    scanf("%d", &N);
    int n = 1;
    int flag = 0;
    while (n) {
        n = N / 2;
        if ((N-n*2) == 1) {
            flag++;
        }
        N = n;
    }
    printf("%d", flag);
    return 0;
}

发表于 2022-04-23 23:22:25 回复(0)
位运算
#include <stdio.h>
int main(){
    int count=0;
    unsigned int val;
    unsigned int bitval=0b10000000000000000000000000000000;
    scanf("%d",&val);
    for(int i=0;i<32;i++){
        if(val&bitval)
            count++;
        bitval=bitval>>1;
    }
    printf("%d",count);
}

发表于 2022-03-26 21:43:02 回复(0)
#include<stdio.h>
int print_num1(int m)
{
    int count=0;
    while(m)
    {
        m&=m-1;
        count++;
    }
    return count;
}
int main()
{
    int m=0;
    scanf("%d",&m);
    printf("%d\n",print_num1(m));
}

发表于 2022-03-22 16:53:09 回复(0)

问题信息

难度:
34条回答 98719浏览

热门推荐

通过挑战的用户

查看代码