题目描述:
输入一个int型数据,计算出该int型数据在内存中存储时1的个数。
知识点: 字符串,查找
输入: 输入一个整数(int类型)
输出: 该数转换成2进制后1的个数
样例输入: 5
样例输出: 2
思路:
该题要考虑全面,正整数、0、负整数三种情况。
因为0、正整数在内存中存储方式简单,但对于负整数,其存储方式为补码,求解起来比较困难。
这种思路其实已经把自己困住了。
好的思路是,对于输入的整型数,在内存中的形式已经形成。只需要对每一位进行判断即可。
其中,算术移位运算符是<<和>>,对于最高/低位做补0操作。
代码:
#include <iostream>
using namespace std;
int main()
{
int num, count = 0;
cin >> num;
for (int i = 0; i < 32; i++)
{
if (num & 1)
count++;
num = num >> 1; // num >>= 1;
}
cout << count;
return 0;
}
得分 | 运行时间 | 内存 | 复杂度 | 最大嵌套深度 |
98(100) | 16ms | 2072KB | 3 | 3 |