求二进制1的个数

  1. int BitCount2(unsigned int n)
  2. {
  3. unsigned int c =0 ;
  4. for (c =0; n; ++c)
  5. {
  6. n &= (n -1) ; // 清除最低位的1
  7. }
  8. return c ;
  9. }

来自为知笔记(Wiz)

附件列表

时间: 2024-11-08 08:02:27

求二进制1的个数的相关文章

编程之美-求二进制1的个数

一个在常见的题目,但是看到编程之美的时候才发现,方法真多,今天来总结一下: 解法一 可以举出一个八位的二进制例子来进行分析.对于一个二进制操作,我们知道,除以一个2,原来的数字将会减少一个0,如果除的过程中有余,那么就表示当前位置有一个1. 以10 100 010为例: 第一次除以2时,商为 1 010 001,余为 0. 第二次除以2时,商为 101 000,余为1. 因此可以根据整型除法的特点求解,代码如下: public int countBit1(int n) { int num = 0

求整型中二进制1的个数

1. 确定二进制1的个数: ->循环死& ->x-1&x ->查表,分写死与动态生成,动态生成方法:BitsSetTable256[i] = (i &1) + BitsSetTable256[i /2]; ->并行位运算: int BitCount4(unsigned int n) {    n = (n &0x55555555) + ((n >>1) &0x55555555) ;    n = (n &0x3333333

蓝桥杯 算法训练 ALGO-151 6-2递归求二进制表示位数

算法训练 6-2递归求二进制表示位数 时间限制:10.0s   内存限制:256.0MB 问题描述 给定一个十进制整数,返回其对应的二进制数的位数.例如,输入十进制数9,其对应的二进制数是1001,因此位数是4. 样例输入 一个满足题目要求的输入范例.9 样例输出 与上面的样例输入对应的输出. 数据规模和约定 输入数据中每一个数的范围. 例:输入在int表示范围内. 题目解析: 在 Java 的 Integer 类的方法中,有将十进制数转换为二进制.八进制和十六进制的三个方法.若参数为正整数,则

计算int 型数值在内存中二进制1的个数

今天在华为OJ上遇到这么一个题目,很简单,但是却总是得不到最好的成绩记录.因此比较了自己的程序.思路与别人的异同,发现还是有很大区别的,遂记录如下. 题目-- 输入一个int型整数,求该整数的二进制在内存中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 思路1 <span style="font-size:18px;">public static void main(String[] args) { Scanner scanner = new

C. Learning Languages 求联通块的个数

C. Learning Languages 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <string> 7 #include <vector> 8 #include <stack> 9 #include <queue&

Factorial Trailing Zeroes(析因,求尾随个0个数)

Given an integer n, return the number of trailing zeroes in n! 这是LeetCode Online Judge上的一个原题:给定一个n,求n!中,末尾0的个数. 思路 n!中0的个数,可以将n!表示成 n!=m*10k,其中k就是题目要求的结果.那么,10k是怎么来的呢?很容易想到,10=2*5,那么,10k=(2*5)k:至此,可以简化成,题目求的是2*5的个数: 进一步思考,1*2*3……(n-1)*n,求2*5的个数就是求1-n

编程题:已知一个一维数组a[10]中有10个数,求出第m个数到第n个数的和。其中m、n由键盘输入。

#include<stdio.h> int sum(int *q,int n) { int i,s=0; for(i=0;i<n;i++,q++) s+=*q; return s; } void main() { int n,m,a[10]={1,2,3,4,5,6,7,8,9,10}; int *p; printf("Please input m and n(m<n<10):\n"); scanf("%d,%d",&m,&am

(笔试题)二进制1的个数相同的距离最小数

题目: 输入:整数A 输出:整数B 条件:A和B的二进制1的个数相同,且A和B之间的距离|A-B|最小. 思路: 根据题意,A和B的二进制1的个数相同,且要求距离最小,那么A和B的差别就在于相邻的bit位,如1100和1010,0011和0101等. 当A的最后一位(低位)为0,则找到最后(右边)一位1,然后将该1与左边的0交换,即得到B:如1100和1010 当A的最后一位(低位)为1,则找到最后(右边)一位0,然后将该0与右边的1交换,即得到B.如0011和0101 代码: #include

LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)

题目链接: https://leetcode.com/problems/divide-two-integers/?tab=Description Problem :不使用乘法,除法,求模计算两个数的除法~ 除法运算:被除数中包含有多少个除数的计算 由于是int类型的除法,因此结果可能超过int的最大值,当超过int的最大值时输出int的最大值 另写除法函数,计算出除法的商. 首先判断出除法运算后的结果是正数还是负数. 之后需要将被除数和除数都变为正数,进行进一步计算 当被除数小于除数时,返回0