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的个数。
数据范围
1≤n≤1000001≤n≤100000,
0≤数列中元素的值≤1090≤数列中元素的值≤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道路之一:基础算法(位运算)的主要内容,如果未能解决你的问题,请参考以下文章