Easy Problem VI

来源:互联网 发布:通信网络维护 编辑:程序博客网 时间:2024/06/15 11:13

DescriptionIn 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 are 2^0, 2^1 and 2^2 respectively.

Calculate the answer for t values of n.
InputThe first line of the input contains a single integer t (1≤t≤100) — the number of values of n to be processed.Each of next t lines contains a single integer n (1≤n≤10^9).
OutputPrint the requested sum for each of t integers n given in the input.

Sample Input

2

41000000000
Sample Output-4499999998352516354
题意:就是求1~n的和 ,只不过其中如果是i是2的幂的话,就是加上它的负数
思路先用数组存一下2的幂,最多粗面30个,因为题上给的数小于2的31次幂 再算n(n+1)/2,把那些是2的幂的数减去两倍
#include<iostream>#include<cstdio>#include<cstring>using namespace std;  int main(){  long long a[100];  int t,k;  long long n,i;  long long sum;  k=0;  sum=1;  a[k]=1;  for(i=1;i<32;i++){    sum*=2;    a[++k]=sum;  }  scanf("%d",&t);  while(t--){    sum=0;    scanf("%lld",&n);    sum=n*(n+1)/2;    for(i=0;i<=k;i++){        if(a[i]<=n)            sum-=2*a[i];    }    printf("%lld\n",sum);  }}


0 0
原创粉丝点击