AcWing 801. 二进制中1的个数
原题链接
简单
作者:
月下邂逅
,
2024-04-22 11:26:59
,
所有人可见
,
阅读 2
C++ 代码
#include<iostream>
using namespace std;
const int N=100010;
int a[N];
int lowbit(int x)
{
return x&(-x);
}
void get_one(int n)//暴力解法,求每一位与1的与结果,若为1则数量++;
{
int one_num=0;
while(n)
{
if(n&1) one_num++;
n=n>>1;
}
printf("%d ",one_num);
}
int main()
{
int n;
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//lowbit解法:根据计算机负数表示的特点,如一个数字原码是10001000,他的负数表示形势是补码,
//就是反码+1,反码是01110111,加一则是01111000,二者按位与得到了1000,就是我们想要的lowbit操作
for (int i=0;i<n;i++)
{
int one_num=0;
while(a[i])
{
a[i]-=lowbit(a[i]);
one_num++;
}
printf("%d ",one_num);
}
/*暴力解法
for (int i=0;i<n;i++)
{
get_one(a[i]);
}
*/
return 0;
}