文章

6

粉丝

696

获赞

1

访问

49.2k

头像
二进制中1的个数
P1547 中山大学机试题
发布于2021年1月11日 15:53
阅读数 7.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;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发