http://acm.split.hdu.edu.cn/showproblem.php?pid=5747
通过这题,学习了位运算的基础操作
题意很好理解,求二进制“1”的个数的变种,
需要注意的地方是m的取值需要处理,不然就会TLE,本来以为是cin/cout的锅
不多说,上代码
#include <iostream>
#include <stdio.h>
using namespace std;
int n,m;
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
m = min(m, 30);///!!!!题目暗示,没有这个TLE
int num=0;
for(int i=0;i<=m;i++){
num += n&1;
n>>=1;
}
//cout<<" "<<n<<" ";
num+=n*2;///m位之前的数需要加上
printf("%d\n",num);
}
return 0;
}