文章
6
粉丝
696
获赞
1
访问
53.9k
根据计算机负数表示的特点,如一个数字原码是10001000,他的负数表示形势是补码,就是反码+1,反码是01110111,加一则是01111000,二者按位与得到了1000。每次操作截取一个数字最后一个1后面的所有位,每次减去得到最后一位为1的数字,直到数字减到0,就得到了最终1的个数,时间复杂度为O(nlog2n)。
int lowbit(int x){
return x & (-x);
}
所有代码:
#include <bits/stdc++.h>
using namespace std;
int lowbit(int x){
return x & (-x);
}
int main(){
int n;
cin >> n;
int res = 0;
while(n){
n -= lowbit(n);
res++;
}
cout << res << endl;
return 0;
}
登录后发布评论
暂无评论,来抢沙发