等比数列算出来所有在n中2的次方和然后前n项和减去2倍的他就好
#include<cstdio> int main(){ int t; scanf("%d",&t); while(t--){ long long n; long long i=1; long long k=0; scanf("%lld",&n); while(i<=n){ i*=2; }//求出最后2的次方 printf("%lld\n",(n+1)*n/2-i*2+2); } return 0; }
#include<cstdio> int main(){ int t; scanf("%d",&t); while(t--){ long long n; long long i=1; long long k=0; scanf("%lld",&n); while(i<=n){ i*=2; }//求出最后2的次方 printf("%lld\n",(n+1)*n/2-i*2+2); } return 0; }