百练 2798:2进制转化为16进制 之 Java 题解

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();
	}
}

 

转载于:https://my.oschina.net/u/553266/blog/708854

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值