还是要注意int和long long的范围,以及double型的问题
pow函数经常会报一个double型的错,参考这篇文章
http://blog.csdn.net/lawrencesgj/article/details/7773507
double pow(double,int)
double sqrt(double)
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> #include <stack> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) #define pf printf #define sf scanf #define debug printf("!\n") #define INF 10000 #define MAX(a,b) a>b?a:b #define blank pf("\n") #define LL long long int main() { int i,j,t,n; sf("%d",&t); while(t--) { sf("%d",&n); long long sum = n*(n+1)/2; for(i = 0;;i++) { long long k = pow(2,i); if(k>n) break; sum-=(2*k); } pf("%I64d\n",sum); } return 0;
原文:http://www.cnblogs.com/qlky/p/5159184.html