ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AcWing 801.二进制中1的个数

2022-07-26 23:38:36  阅读:245  来源: 互联网

标签:15 数字 二进制 lowbit 一位 int 801 AcWing


题目链接:https://www.acwing.com/problem/content/803/    位运算


n 的二进制表示中第 k 位是几?

假设 n=15=(1111)2 

①先把第 k 位移到最后一位  n>>k

②看个位是几  x&1

两步合起来可以这样表示:n>>k&1

 

位运算“&”可以判断变量 x 的奇偶性:

x&1 = 0(偶数)

x&1 = 1(奇数)

 

lowbit(x):返回 x 的最后一位“1”及后面的数字,比如:

x=1010  lowbit(x)=10

x=101000  lowbit(x)=1000


 

思路:

对于每个数字a,a&1得到了该数字的最后一位,之后将a右移一位,直到最后一位,就得到了1的个数


 

放AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,a,k;
 6     cin>>n;
 7     for(int i=0 ;i<n; i++)
 8     {
 9         k=0;
10         cin>>a;
11         while(a)
12         {
13             k+=a&1;
14             a=a>>1;
15         }
16         cout<<k<<" ";
17     }
18     return 0;
19 }

 

标签:15,数字,二进制,lowbit,一位,int,801,AcWing
来源: https://www.cnblogs.com/marswithme/p/16523092.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有