其他分享
首页 > 其他分享> > AcWing 801.二进制中1的个数

AcWing 801.二进制中1的个数

作者:互联网

题目链接: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