給定 T 個無符號整數 (0 ≤ n ≤ 10⁸),輸出其二進制表示,**去除前導零**。T ≤ 1000。
輸入: 5 23 535 2624 56275 989835 輸出: 10111 1000010111 101001000000 1101101111010011 11110001101010001011
n == 0 直接輸出 0n % 2 取餘 (得最低位),n /= 2 右移import java.util.ArrayList;
import java.util.Scanner;
public class Q1473 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
int[] inputs = new int[T];
for (int i = 0; i < T; i++) {
inputs[i] = scanner.nextInt();
}
for (int n : inputs) {
if (n == 0) {
System.out.println("0");
continue;
}
ArrayList bits = new ArrayList<>();
while (n != 0) {
bits.add(n % 2);
n /= 2;
}
// 反向輸出
for (int i = bits.size() - 1; i >= 0; i--) {
System.out.print(bits.get(i));
}
System.out.println();
}
scanner.close();
}
}
public class Q1473Optimized {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
StringBuilder output = new StringBuilder();
for (int i = 0; i < T; i++) {
int n = sc.nextInt();
output.append(toBinaryString(n)).append('\n');
}
System.out.print(output);
sc.close();
}
// 手工實現 (教學用),生產請用 Integer.toBinaryString(n)
private static String toBinaryString(int n) {
if (n == 0) return "0";
char[] buf = new char[32]; // int 最大 32 位
int idx = buf.length;
while (n != 0) {
buf[--idx] = (char) ('0' + (n & 1)); // 位運算取最低位
n >>>= 1; // 無符號右移
}
return new String(buf, idx, buf.length - idx);
}
}
| 技術 | 說明 |
|---|---|
| n % 2 / n & 1 | 取最低位 (0 或 1) |
| n /= 2 / n >>>= 1 | 右移一位 (無符號右移避免負數符號位擴展) |
| ArrayList / char[] | 收集位元 (反序產生) |
| 反向遍歷 / StringBuilder | 正序輸出 |
| 特判 n==0 | 避免輸出空字串 |
System.out.println(Integer.toBinaryString(n));