前言
位运算的作用不可忽视。
- 求数字n的第k位数字:
n >> k & 1
- 返回数字n的最低一位1后面跟着一堆0:
lowbit(n) = n & -n
一、题目陈述
二、解决思路
每次利用lowbit操作取出最低位的1减去,直到减为0。
三、代码实现
#include<iostream>
using namespace std;
const int N = 1e5+10;
int a[N];
int n;
int lowbit(int x) {
return x&(-x);
}
int main() {
cin>>n;
for(int i=0;i<n;i++) {
cin>>a[i];
int res = 0;
while(a[i]) {
a[i] -= lowbit(a[i]);
res ++;
}
cout<<res<<' ';
}
cout<<endl;
return 0;
}
总结
位运算的作用不可忽视。要善于总结并善于应用。