ps:Java水题。比赛的时候以为直接暴力。
但其实TLE.
然后打了一个表。
然而,只找到一点规律。
最后,找到了。
其实就是把数转化为二进制。
然后,遍历二进制中1.位数为n;ans+=2^n-1;
然后ans用大数;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
public class bigint {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int t=cin.nextInt();
while(t>0) {
BigInteger n=cin.nextBigInteger();
BigInteger ans = new BigInteger("0");
BigInteger l = new BigInteger("1");
String s;
s=n.toString(2);
//System.out.println(s);
int len=s.length();
int x=0;
for(int i=len-1;i>=0;i--) {
char c=s.charAt(i);
//System.out.println(c);
if(c=='1') {
BigInteger m = new BigInteger("2");
m=m.pow(x);
m=m.subtract(l);
ans=ans.add(m);
}
x++;
}
System.out.println(ans);
t--;
}
}
}