2798:2进制转化为16进制
描述
输入一个2进制的数,要求输出该2进制数的16进制表示。
在16进制的表示中,A-F表示10-15
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000
输出
n行,每行输出对应一个输入。
样例输入
2 100000 111
样例输出
20 7
心得: 因为输入是最长可达10000位的二进制字符串, 所以采用BigInteger.
注意: BigInteger 的初始化, 其参数是字符串;
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();
}
}