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

   

原文链接: https://www.cnblogs.com/YNorcoding/p/12241450.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/325818

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午3:29
下一篇 2023年3月1日 下午3:30

相关推荐