题目链接:http://codeforces.com/contest/598/problem/A
题目分类:大数
题意:1到n 如果是2的次方则减去这个数,否则就加上这个数,求最后的结果是多少
题目分析:数很大,关键是精度问题,刚开始用__int64和double发现都是不对的,后来发现用long long 可以过
代码:
#include<bits/stdc++.h> using namespace std; #define LL long long LL a[]={,,,,,,,,,
,,,,,,
,,,,,,
,,,,,
,,,,}; int main()
{
int t;
LL n;
LL ans;
cin>>t;
while(t--)
{
cin>>n;
ans=n*(+n)/;
//cout<<ans<<endl;
for(int i=;i<=;i++)
{
if(n>=a[i])
{
ans-=*a[i];
}
else
{
break;
}
}
cout<<ans<<endl;
}
return ;
}