百練 2798:2進制轉化爲16進制 之 Java 題解

2798:2進制轉化爲16進制

描述java

輸入一個2進制的數,要求輸出該2進制數的16進製表示。
在16進制的表示中,A-F表示10-15測試

輸入spa

第1行是測試數據的組數n,後面跟着n行輸入。每組測試數據佔1行,包括一個以0和1組成的字符串,字符串長度至少是1,至可能是10000code

輸出ip

n行,每行輸出對應一個輸入。ci

樣例輸入字符串

2
100000
111

樣例輸出table

20
7

心得: 由於輸入是最長可達10000位的二進制字符串, 因此採用BigInteger.class

注意: BigInteger 的初始化, 其參數是字符串;import

BigInteger 是 immutable 的, 因此計算以後要賦新值;

import java.math.BigInteger;
import java.util.Scanner;

public class OpenJudge2798 {

	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		final int n = cin.nextInt();
		final BigInteger TWO = new BigInteger("2");
		BigInteger[] base = new BigInteger[10000];
		base[0] = BigInteger.ONE;
		for (int i = 1; i < 10000; i++) {
			base[i] = base[i - 1].multiply(TWO);
		}
		for (int i = 0; i < n; i++) {
			String binary = cin.next();
			BigInteger sum = BigInteger.ZERO;
			int k = binary.length();
			for (int j = 0; j < binary.length(); j++) {
				k--;
				char ch = binary.charAt(j);
				if (ch == '1') {
					sum = sum.add(base[k]);
				}
			}

			System.out.println(sum.toString(16).toUpperCase());
		}
		cin.close();
	}
}
相關文章
相關標籤/搜索