

思路
这道题本质上是要计算一个数字在二进制下"1"的个数,然后构造出另一个具有相同数量"1"但取值最小的数字。

求解代码
java
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine().trim());
while (T-- > 0) {
String str = br.readLine();
long n = Long.parseLong(str.trim());
int c = Long.bitCount(n);
long k = (1L << c) - 1;
out.println(c + " " + k);
}
out.flush();
out.close();
br.close();
}