CodeFoeces-598A

题目

原题链接:A. Tricky Sum

题意

从1~n累加,若遇到2的指数,则减去,求最后的和。参考了其他作者的代码。

代码

#include
using namespace std;
int main() {
    long long n,ans;
    int t,tmp;
    scanf("%d",&t);
    while(t--){
        scanf("%lld",&n);
        ans=n*(n+1)/2;
        tmp=1;
        while(n){
            ans-=2*tmp;
            tmp*=2;
            if(n==1) break;
            n/=2;           
        }
        printf("%lld\n",ans);
    }
    return 0;
}

你可能感兴趣的:(CodeFoeces-598A)