描述
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入:
5
输出:
2
针对这个有很多解法,让我们详细解答一下叭.
解法一:bitset
遇到二进制很多人会想起bitset函数,将整数转化成二进制,然后利用搭配的count函数输出包含1的个数。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
bitset<32> b(a);
cout<<b.count();//此时b成为了一个新的对象
}
解法二:数学方法
这种解法是把数假设为2进制,如果%2有余数,说明二进制的最后一位是1,否则是0,这样每一次之后加上这个余,之后除以2进行右移,二进制刚刚判断的位就抹去了。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
int m=0;
while(a>0)
{
m=m+a%2;
a=a/2;
}
cout<<m;
}
解法三:整数转为字符串,遍历字符串的1的个数
(知识点:在数字后面加上(+‘0’)就是将数字转化为字符的方法)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
int m=0;
string str;
while(a>0)
{
str+=(a%2+'0');//写成=+str是错误的形式
a=a/2;
}
int b=str.size();
for(int i=0;i<b;i++)
{
if(str[i]=='1')
m++;
}
cout<<m;
}