文章
1
粉丝
0
获赞
18
访问
219
大家都忽略了负数的情况,包括测试用例也忽略了这个问题。正确最优解如下:
#include <iostream>
using namespace std;
int main() {
int num;
// 推荐统一使用 cin/cout,或者统一使用 scanf/printf
if (cin >> num) {
int count1 = 0;
// int 固定为 32 位,直接循环 32 次检查每一位
for (int i = 0; i < 32; i++) {
// (num >> i) 将第 i 位移动到最右边
// & 1 用于判断最右边这一位是不是 1
if ((num >> i) & 1) {
count1++;
}
}
int count0 = 32 - count1;
cout << "count0=" << count0 << " count1=" << count1 << endl;
}
return 0;
}
num 是正是负还是零,它在内存中必定是 32 个比特位。移位操作 >> 配合按位与 & 会诚实地反映这 32 位里到底有几个 1。
登录后发布评论
暂无评论,来抢沙发