华为机试_HJ62 查找输入整数二进制中1的个数【简单】【收藏】

本文介绍了两种计算正整数二进制表示中1的个数的方法:常规方法和位运算方法。通过示例代码详细解析了每种方法的具体实现,并强调了位运算在效率上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

描述

输入描述:

输出描述:

解题过程

提交代码一(常规方法)

提交代码二(位运算方法)

学习代码

代码一

代码二

收藏点


描述

输入一个正整数,计算它在二进制下的1的个数。

注意多组输入输出!!!!!!

数据范围:1≤n≤2^31−1 

输入描述:

输入一个整数

输出描述:

计算整数二进制中1的个数

解题过程

啪的一下啊,很快啊。

我觉得是考察多组出入输出。

不对,上面写的是考察位运算。所以,以后确实要看考察点了,不能随便写。

提交代码一(常规方法)

#include <stdio.h>

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

提交代码二(位运算方法)

//位运算方法

#include <stdio.h>
int main() {
    int a, b=0;
    int ii=32;
    while (scanf("%d", &a) != EOF) { 
        b=0;
        while(ii)
        {
            if((a&1)==1)//其实更好是a&0x01;
            {b++;}
            a>>=1;
            ii--;
        }
        printf("%d\n",b);
    }
    return 0;
}

学习代码

代码一

(来源:https://www.nowcoder.com/users/297309805

#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;
}

我觉得值得学习的一点是,他的条件是这样限制的:

这样就降低了时间复杂度。


代码二

(来源:【十二题解】 | #查找输入整数二进制中1的个数#_牛客博客

#include<stdio.h>

int main(){
    int number;
    while(scanf("%d", &number) !=EOF){
        int count = 0;
        for(int i=0; i<31; i++){
            if(number & 1 == 1)count++;
            number >>= 1;
        }
    printf("%d\n", count);
}

和我的思路很像,优势在于简洁。

收藏点

位运算注意三点:

1. 右移/2,左移*2,这个我能记住;

2. num>>=1的格式

3. num&0x01的写法,更专业。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值