按照题意模拟即可,每次取最高位可以不断用x−=lowbit(x)减去最低位,直到剩下最高位 每次操作是logx的,最多操作logx次,因为位运算常数小,所以可以通过
#include<iostream>
using namespace std;
int t,n,a,k,l,m;
int main()
{
scanf("%d", &t);
while(t --){
scanf("%d", &n);
a = n%2;
k = 0;
while(n){
if(n % 2) k ++;
n /= 2;
}
l = 2 * (k - a) + k % 2;
printf("%d \n", l);
}
}