Description
In this problem you are to calculate the sum of all integers from 1 to n, but you should take all powers of two with minus in the sum.
For example, for n = 4 the sum is equal to - 1 - 2 + 3 - 4 = - 4, because 1, 2 and 4 are20, 21 and 22 respectively.
Calculate the answer for t values of n.
Input
The first line of the input contains a single integer t (1 ≤ t ≤ 100) — the number of values ofn to be processed.
Each of next t lines contains a single integern (1 ≤ n ≤ 109).
Output
Print the requested sum for each of t integersn given in the input.
Sample Input
2 4 1000000000
-4 499999998352516354
Sample Output
302000
Hint
The answer for the first sample is explained in the statement.
2的所有次方和:s=2^(t+1)-1(等比数列求和且2^t<n)
h=1+2+3+4+……+n=n(n+1)/2
最后结果:
ans=h-2*t;
My solution:
/*2016.3.12*/
<pre name="code" class="cpp">#include<stdio.h>
long long n;
long long ans,su;
void jie()
{
int i,t1=0;
long long time=2;
ans=1;
while(ans<=n)
{
t1++;
ans*=2;
}
i=t1;
ans=1;
while(i)
{
if(i%2)
ans*=time;
i/=2;
time*=time;
}
return ;
}
int main()
{
long long i;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%I64d",&n);
jie();
if(n%2==0)
su=(n/2)*(n+1);
else
su=((n+1)/2)*n;
su=su-2*(ans-1);
printf("%I64d\n",su);
}
return 0;
}