codeforces #edu 1 A tricky sum

题意:求1+2+..+n的和。。但是对于是2的整数幂的项数。。符号是-。。

思路:可以先当做正数。(n+1)*n/2; 然后减去二倍的2的整数次幂的项的和。

坑点: 妈蛋第三次了。。。我想求小于等于n的最大是2的几次幂。。。取整的时候用int又会迷之错误。。。为什么说是迷之错误。。因为我WA的点的数据拿下来在本地跑是没有问题的。。。一交上去就错。。。不明觉厉。。。下次遇到double类型是数一点要小心小心再小心。。。第一次遇到是pow的返回类型是double,然后答案莫名奇妙的差1.第二次是#334 div2 的A题。。一道傻逼算分数的题我WA了一个小时。。。第三次是这个。。向下取整不要用(int)的强制转换。。而用floor吧。。233

/* ***********************************************
Author :111qqz
Created Time :2015年12月03日 星期四 16时46分46秒
File Name :code/cf/edu/A.cpp
************************************************ */
 1#include <cstdio>
 2#include <cstring>
 3#include <iostream>
 4#include <algorithm>
 5#include <vector>
 6#include <queue>
 7#include <set>
 8#include <map>
 9#include <string>
10#include <cmath>
11#include <cstdlib>
12#include <ctime>
13#define fst first
14#define sec second
15#define lson l,m,rt<<1
16#define rson m+1,r,rt<<1|1
17#define ms(a,x) memset(a,x,sizeof(a))
18typedef long long LL;
 1using namespace std;
 2const double eps = 1E-8;
 3const int dx4[4]={1,0,0,-1};
 4const int dy4[4]={0,-1,1,0};
 5const int inf = 0x3f3f3f3f;
 6LL n;
 7int main()
 8{
 9	#ifndef  ONLINE_JUDGE 
10	freopen("code/in.txt","r",stdin);
11  #endif
 1	int T;
 2	scanf("%d",&T);
 3	while (T--)
 4	{
 5	    LL sum = 0 ;
 6	    cin>>n;
 7	    LL k = LL(floor(log(n)/log(2)));
 8	   // cout<<"k:"<<k<<endl;
 9	    k =(1<<(k+1))-1;
10	 //   cout<<"kk:"<<k<<endl;
11	    sum = sum-2*k;
12	  //  cout<<"sum:"<<sum<<endl;
13	    s`um = sum + (n+1)*n/2;
14	    cout<<sum<<endl;
15	}
1  #ifndef ONLINE_JUDGE  
2  fclose(stdin);
3  #endif
4    return 0;
5}