剑指off-统计数字二进制位有多少个1

2023-12-19 22:58
文章标签 二进制位 统计数字

本文主要是介绍剑指off-统计数字二进制位有多少个1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//判断一个数字有多少位1
//运用位运算,用n与1进行与运算,然后向左移动1,为什么不向右移动n,因为如果n是负数的话首位会不停补充1,造成死循环。
int NumberOfOne(int n)
{int count=0;int one=1;while (one!=0) {if (n & one) {count++;}one=one<<1;}return count;
}
//另一种解法,n-1与n 会将n最右边的1变成0,那么有多少个1就会进行多少次运算,不像第一种方法,次数是固定的
int numberofone(int n)
{int count=0;while (n>0) {n=(n-1) & n;count++;}return count;
}
//相关题目
//1.判断一个数字是不是二的整数次幂,当一个数是二的整数倍的时候它有且仅有一个1
//2.m,n m要改变多少位才能变成n,先求m^n 得到的结果再求里面有多少个1

这篇关于剑指off-统计数字二进制位有多少个1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514001

相关文章

python实战实例:统计数字字符个数输出亲朋字符串

1.统计数字字符个数—题目描述 输入一行字符,统计出其中数字字符的个数。 输入格式 一行字符串。 输出格式 输出为 1 行,输出字符串里面数字字符的个数。 输入输出样例 输入 #1 Today is 2021-03-27 输出 #1 8 char=input()x=0for i in char:if i.isdigit():x=x+1print(x) 要点: isa

LeetCode 题3:统计数字

题目描述: 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 例如n=12,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]中,我们发现1出现了5次 (1, 10, 11, 12) 思路一:我们可以用最简单的办法先尝试一下,遍历1到n中间的每个整数,对每个整数从低位到高位依次检查,如果有k出现则计数器自加。 思路一最大的问题就是效率,当n非常

统计数字(信息学奥赛一本通-T1239)

【题目描述】 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5∗10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 【输入】 第一行是整数 n,表示自然数的个数; 第2~n+1每行一个自然数。 【输出】 包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分

B2109 统计数字字符个数

统计数字字符个数 题目描述 输入一行字符,统计出其中数字字符的个数。 输入格式 一行字符串,总长度不超过 255 255 255。 输出格式 输出为 1 1 1 行,输出字符串里面数字字符的个数。 样例 #1 样例输入 #1 Today is 2021-03-27 样例输出 #1 8 方法1 解题思路: 本题要求统计给定字符串中数字字符的个数。我们可以遍历

hdu 4810 思维题+二进制位规律+异或规律 213南京现场赛题

http://acm.hdu.edu.cn/showproblem.php?pid=4810 以前做过一些涉及异或的题,化为二进制形式,然后统计0,1个数是一种很常见的处理方法,但是在做这个题的时候居然没尝试,脑残啊...... 一开始看5s时限,感觉稍微暴力一点应该可以,于是YY的O(n^3)算法但是没去实现,明显超时啊,大致就是通过C(n,1)的组合可以在O(n^2)内处理出C(n,2)的

让星星⭐月亮告诉你,2的n次幂与二进制位全为1之间的联系,为啥只差一个1

现象: 2 ^ 3 = 8 = (1+2+4) +1 =(2 ^ 0+2 ^ 1+2 ^ 2)+1 即2 ^ 3 - 1=(2 ^ 0+2 ^ 1+2 ^ 2) 2 ^ 4 = 16 = (1+2+4+8) +1 =(2 ^ 0+2 ^ 1+2 ^ 2+2 ^ 3)+1 即2 ^ 4 - 1=(2 ^ 0+2 ^ 1+2 ^ 2+2 ^ 3) 观察上述现象,可以发现2的n次幂等于2的0次幂到2的(

【C】190 颠倒二进制位

颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 解法一 #include <stdint.h>uint32_t reverseBits(uint32_t n) {uint32_t re

小写转大写输出,并统计数字、大写字母、小写字母的个数

键盘输入数字、大写字母、小写字母的混合串(以回车结束,100个以内), 将其中的小写字母转换为大写字母后显示到CRT上 data segmentmess db "please input", 0dh,0ah,'$'buf db 101 db ?db 101 dup (0)data endscode segmentassume cs:code,ds:data,es:datasta

二进制位的倒序(牛人代码)

8位的倒序 uint8 bin8_rev(uint8 data)  {      data=((data&0xf0)>>4) | ((data&0x0f)<<4);      data=((data&0xCC)>>2) | ((data&0x33)<<2);      data=((data&0xAA)>>1) | ((data&0x55)<<1);      return data;

POJ 3286 How many 0's? / 2282 The Counting Problem 排列组合统计数字

比如算4123中有多少个2   按位统计,,,先算各位,,个位是2的情况有413种,,,因为各位左边可以0~412,,,而右边没有数字,,, 然后是十位,,,十位是2的有41*10 + 1*4种,,当左边从0~40时,,,右边可以从0~9,,,而左边为41时,,右边只能从0~3 然后是百位,,,,百位有4*100种,,,,即左边从0~3,,右边从0~99 千位有  1*1000,,,左边