简单题 就是求1,2,3···n,每个数分解质因数之后一共有多少个2,不断n/2,加上n/2即可。
n/2 表示1-n中是2的倍数的数有多少个,然后加n/2 就是这些数每个数贡献一个2。1~n中2的倍数都除以2之后,
就看操作之后1~n/2中有多少个数能被2整除。循环操作
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int t;
scanf("%d", &t);
while(t--)
{
int n;
scanf("%d", &n);
int sum = 0;
while(n)
{
n /= 2; //看1~n中,有多少个数能被2整除
sum += n; //有多少个数能被2整除就有多少个2
}
printf("%d\n", sum);
}
return 0;
}