求和,前n项和,然后减去二倍n范围内2的次方倍的和。
#include<bits/stdc++.h>
#define MOD 100000007
#define ll long long
const int maxn=2e2+20;
using namespace std;
int dp[maxn];
struct node{
int x,y;
}a[maxn];
int cmp(node a,node b){
if(a.y==b.y) return a.x<b.x;
return a.y>b.y;
}
int main(){
ll n,sum,mul,t=1;
int i,T;
scanf("%d",&T);
while(T--){
sum=0,t=1;
scanf("%lld",&n);
sum=n*(n+1)/2;
mul=1;
for(i=1;i<=64;++i){
mul*=2;
if(mul>n) break;
t+=mul;
}
//printf("%lld\n",t);
printf("%lld\n",sum-2*t);
}
return 0;
}