传送门 ↓ ↓ ↓
目录
1、题目
2、思路&知识点
3、AC代码
1、题目
题目链接
?
2、思路&知识点
使用lowbit 函数 :返回x的最后一位1? ? eg lowbit(10) 输出 10? lowbit (16)输出10000
int lowbit(int x) {
return x & -x ;
}
-x=(~x + 1 )? 负x 表示 x的补码
eg? ? x=10?
二进制位表示?x=1010 .... 1 00..0
????????????????? ? ?~x=0101....011....1
? ? ? ???????????~x+1=0101...100..0
? ? ?? ? x & - x? ? =? 000...01010
知识点? ? ? ?
拿12举例? 二进制? n=12
源码? n? 00....0001100? ?32位? 第一位表示符号??
反码? n? 11.....1110011? 相反
补码? n? 11.....1110100? 取反加一?
3、AC代码
#include <iostream>
using namespace std ;
int lowbit (int x ) {
return x & -x;
}
int main () {
int n;
cin >> n;
while (n--) {
int x;
cin >> x;
int res=0;
while (x) { //每次去除x的一个1 直到x为0
x-=lowbit (x);
res ++;
}
cout << res <<' ' ;
}
return 0;
}
感谢观看 码字不易 求~
?
|