百练 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();
	}
}
相关文章
相关标签/搜索