ACM道路之一:基础算法(位运算)

Posted ynorcoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM道路之一:基础算法(位运算)相关的知识,希望对你有一定的参考价值。

lowbit(x) : 返回x的最后一位1

lowbit(100010)   = 10

lowbit(11011000) = 1000

lowbit(x) = x&(-x)   = x & (~x+1)  : -x  x的补码 = x 取反+1

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

输入格式

第一行包含整数n。

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

输出格式

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

数据范围

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

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2

代码:
#include<bits/stdc++.h>
using namespace std;
int lowbit(int x)
{
    return x&-x;
}
int main()
{
    int n;
    int k;
    cin>>n;
    while(n--)
    {
        cin>>k;
        int res=0;
        while(k) 
        {
            k-=lowbit(k);
            res++;
        }
        cout<<res<<" ";
    }
}

n>>k   n右移k位 

n>>1  n右移1位 == n/2

int n=10;

undesigned int k =  -n;

显示二进制数

    for(int i=31;i>=0;i--)
    {
        cout<<(k>>i&1);
    }

k:11111111111111111111111111110110

n:00000000000000000000000000001010

k+1:11111111111111111111111111110111

(k+1)&n:0000000000000000000000000000010<<<<<<<---------------------->>>>>>10

   

以上是关于ACM道路之一:基础算法(位运算)的主要内容,如果未能解决你的问题,请参考以下文章

[算法]位运算问题之一

基础算法位运算-基本运算

AcWing算法基础课排序 二分 高精度 前缀和 差分 双指针 位运算 离散化 区间合并

位运算---算法的基础

位运算---算法的基础

位运算---算法的基础