题解 | #查找输入整数二进制中1的个数#
查找输入整数二进制中1的个数
http://www.nowcoder.com/practice/1b46eb4cf3fa49b9965ac3c2c1caf5ad
题目的主要信息:
输入一个正整数,计算它在二进制下的1的个数。
方法一:
移位统计。每次判断n的二进制的最低位是否为1,更新统计变量count。然后将n向右移动一位,直至判断完所有位。 具体做法:
#include<iostream>
using namespace std;
int main(){
int n;
while(cin >> n){
int count = 0;
while(n > 0){
if(n & 1){//看最低位是否为1
++count;
}
n >>= 1;//向右移动一位
}
cout << count << endl;
}
return 0;
}
复杂度分析:
- 时间复杂度:,n转换为二进制后,总共有位。
- 空间复杂度:,只用了常数空间。
方法二:
用位图。将整数n转为位图,利用位图的函数count输出1的个数。bitset的每一个元素只能是0或1,每个元素仅用1bit空间。
具体做法:
#include <iostream>
#include <bitset>
using namespace std;
int main(){
int n;
while(cin >> n){
bitset<32> bs(n);//转为位图
cout << bs.count() << endl;//输出位图中的1的个数
}
return 0;
}
复杂度分析:
- 时间复杂度:,count函数的时间复杂度为。
- 空间复杂度:,n转为bitset的大小为位。