AcWing 801. 二进制中1的个数
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=100010; 4 int n,g[N]; 5 int lowbit(int x) 6 { 7 return x & -x; 8 } 9 int main() 10 { 11 cin>>n; 12 13 for(int i=0;i<n;i++) 14 { 15 int x,res=0; 16 cin>>x; 17 while(x) 18 { 19 x-=lowbit(x); 20 res++; 21 } 22 cout<<res<<" "; 23 } 24 }
lowbit函数的作用:
(返回x的二进制最后一个1的位置)使用lowbit操作,进行,每次lowbit操作截取一个数字最后一个1后面的所有位,每次减去lowbit得到的数字,直到数字减到0,就得到了最终1的个数。
lowbit原理
根据计算机负数表示的特点,如一个数字原码是10001000,他的负数表示形势是补码,就是反码+1,反码是01110111,加一则是01111000,二者按位与得到了1000。例如8 第一次10-lowbit(10)=10-2=8 然后8-lobit(8)=8-8=0;

浙公网安备 33010602011771号