题解 | #数字游戏#
数字游戏
https://ac.nowcoder.com/acm/contest/11217/A
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static class IntInfo {
boolean flag; // 二进制表示时是否有奇数个1
int highest_bit_index; // 二进制表示时1的最高位索引值
public IntInfo() {
flag = true;
highest_bit_index = 0;
}
}
public static IntInfo isOddCountOne(int arg) {
int count = 0;
int native1 = arg;
IntInfo ret = new IntInfo();
int index = 0;
while ((native1 >> index) > 0) {
if ((native1 & 1) == 1) {
count++;
ret.highest_bit_index = index;
}
index++;
}
ret.flag = (count % 2) == 0 ? true : false;
return ret;
}
public static int getTransformTimes(int arg) {
int ret = 0;
while (arg > 0) {
IntInfo info = isOddCountOne(arg);
if(info.flag) {
arg = arg ^ 1;
} else {
arg = arg ^ (1 << 31);
}
ret++;
}
return ret;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int count = in.nextInt();
for (int i = 0; i < count; i++) {
int num = in.nextInt();
System.out.println(getTransformTimes(num));
}
// // 注意 hasNext 和 hasNextLine 的区别
// while (in.hasNextInt()) { // 注意 while 处理多个 case
// int a = in.nextInt();
// int b = in.nextInt();
// System.out.println(a + b);
// }
}
}