首页 > 其他分享 >HJ62 查找输入整数二进制中1的个数

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

时间:2023-07-10 23:55:45浏览次数:45  
标签:count 右移 二进制 个数 整数 int 查找 HJ62

1. 题目

读题

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

 

考查点

 

这道题的考查点可能有以下几个方面:

  • 二进制的基本知识,如二进制的表示、转换、运算等,以及负数的补码表示方法。
  • 位运算的技巧,如如何利用与、或、异或、左移、右移等操作来实现一些常见的功能,如判断某一位是否为1、清零某一位、统计1的个数等。
  • 代码的简洁性和效率,如如何避免不必要的循环和判断,如何选择合适的数据类型和运算符,如何利用一些巧妙的公式或规律来优化算法。

2. 解法

思路

 

输入整数二进制中1的个数有几种方式实现,我给你列举一些:

  • 一种是逐位判断,即从整数的最低位开始,依次和1做与运算,如果结果为1,则说明该位是1,否则是0,然后右移一位,继续判断,直到整数变为0为止。这种方法的循环次数等于整数的二进制位数。
  • 另一种是利用n&(n-1),即每次将整数和它减去1的结果做与运算,这样可以消去最右边的一个1,直到整数变为0为止。这种方法的循环次数等于整数的二进制中1的个数。
  • 还有一种是使用bitset,即将整数转换为一个32位的二进制集合,然后调用count()函数统计其中1的个数。这种方法只需要两行代码就可以实现.

代码逻辑

 

具体实现

  • 逐位判断
public int numberOf1(int n) {
    int count = 0;
    while (n != 0) {
        // 如果最低位是1,计数加一
        if ((n & 1) == 1) {
            count++;
        }
        // 右移一位,注意要用无符号右移
        n = n >>> 1;
    }
    return count;
}
  • 利用n&(n-1):
public int numberOf1(int n) {
    int count = 0;
    while (n != 0) {
        // 每次消去最右边的一个1,计数加一
        count++;
        n = n & (n - 1);
    }
    return count;
}
  • 使用bitset:
import java.util.BitSet;

public int numberOf1(int n) {
    // 将整数转换为32位的二进制集合
    BitSet bs = BitSet.valueOf(new long[]{n});
    // 返回集合中1的个数
    return bs.cardinality();
}

 

3. 总结

 

标签:count,右移,二进制,个数,整数,int,查找,HJ62
From: https://www.cnblogs.com/shoshana-kong/p/17478496.html

相关文章

  • HJ60 查找组成一个偶数最接近的两个素数
    1.题目读题HJ60 查找组成一个偶数最接近的两个素数  考查点 2.解法思路 代码逻辑 具体实现publicclassHJ60{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();getPrimeNu......
  • MySQL5.6.x二进制包升级到5.7.x
    #!/bin/bash#mysql数据库用户名myuser="root"#mysql数据库密码mypwd="123456"#数据库备份路径dbbakdir="/data/dbbak"#数据库目录datadir="/data/mysql"#系统mysql用户sysmysqluser="mysql"#系统mysql组sysmysqlgroup="mysql"#my......
  • 查找父子组件
    查找父组件this.$parent==>返回当前组件的父组件实例this.$root==>根组件(如果当前实例没有父实例,此实例将会是其自己)查找子组件this.$children==>当前组件的所有子组件的列表(中返回的是子组件的实例) this.$children[0].xxxx='aaaaa'; 去修改子组件的值 ***......
  • 哨兵 查找算法_右手 深度
    1importnumpyasnp23#生成一个10*10全为0的array45maze=np.zeros((10,10),dtype=int)6#给array使用数字9包围7#添加行8maze=np.insert(maze,0,np.full(10,9,dtype=int),axis=0)9maze=np.insert(maze,len(maze),np.full(10,9,dt......
  • DAS二进制专项赛
    终究还是re✌更上流一些。卸载所有的前面555,又是一个月无所事事,还当了一回fw。爬回来学习一下专项赛的题目。笔者不是个铸币,比赛的时候一点也不会。easy-noteglibc-2.23的题目,UAF很明显,直接打_free_hook就行。当然打__malloc_hook,realloc调整栈帧也可。蒻纸笔者在比赛的时候......
  • 二分法查找目标元素在数组中的索引
    /***给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,*如果目标值存在返回下标,否则返回-1。*输入:nums=[-1,0,3,5,9,12],target=9*输出:4*解释:9出现在nums中并且下标为4......
  • 查找多个字符串的正则表达式
    非元组捕获的语法为:(?:exp) 比如查找江浙沪包邮区:(?:浙江|上海|江苏) 元组的概念(待补充)Python中的元组Python中元组(Tuple)是一种特殊的列表,是Python中可以用于存储数据集合数据类型。它的特殊性是:元组是一个是有序的且不可改变的集合......
  • 42. 查找算法
    一、线性查找算法  线性查找是逐一比对,发现有相同值,就返回下标,否则返回-1。这里,我们实现的线性查找是找到一个满足条件的值就返回。/***@brief线性查找**@paramA待查找的数组*@paramN数组的长度*@paramvalue待查找的元素*@returnint如果找到返回......
  • C++黑马程序员——P189-192. string容器 构造函数,赋值,拼接,查找和替换
    P189.string容器——构造函数P190....——赋值操作P191....——字符串拼接P192....——字符串查找和替换P189.构造函数———————————————————————————————————————————————————————————————......
  • 整数二进制奇数,偶数位的打印
    #include<stdio.h>voidPrint(intn){ inti=0; printf("偶数位:"); for(i=30;i>=0;i-=2) { printf("%d",(n>>i)&1); } printf("\n"); printf("奇数位:"); for(i=31;i>......