欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[模板题]二进制中1的个数

程序员文章站 2024-03-03 22:44:16
...

来源:模板题

算法标签:位运算

题目描述:

给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。

输入格式

第一行包含整数n。

第二行包含n个整数,表示整个数列。

输出格式

共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。

数据范围

1≤n≤100000,
0≤数列中元素的值≤109

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2

思路

x	=	1010
原码		0000....1000
反码 	1111....0111
补码 	1111....1000		-x+1
x&-x	0000....1000	



补码怎么来的:
x+(-x)=0;
	-x=0-x
 	  =0.....0-x
  	  =1000...0-x
  	  =-x+1

题目代码

#include<iostream>

using namespace std;


int lowbit(int n){return n&-n;}//返回最近的1
int main()
{
    int n;
    cin>>n;
    
    while(n--)
    {
         int t;
         cin>>t;
         
         int ans=0;
         while(t)t-=lowbit(t),ans++;//每次减去二进制中的1,自增
         cout<<ans<<" ";
    }
    return 0;
}
相关标签: 模板题