java实现二进制转十六进制

题目链接:

百练OJ:2798

描述:输入一个2进制的数,要求输出该2进制数的16进制表示。在16进制的表示中,A-F表示10-15
输入:第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字符串长度至少是1,至多是10000
输出:n行,每行输出对应一个输入。

对于一个值比较小的二进制数转化为十六进制的数可以在java中直接调用函数解决,代码如下:

解题代码一:

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		int n=input.nextInt();
		while(n>0){
			int k=input.nextInt();
			int tem=Integer.parseInt(String.valueOf(k), 2);
			String str=Integer.toHexString(tem).toUpperCase();
			System.out.println(str);
			n--;
		}
		input.close();
	}
}
但是,本题的输入二进制的位数很多,字符长度可达10000,超出了int型数的限制,于是,解题应更加复杂。

对于一个二进制的数每四位数可以转化为一个十六进制数,例如1111可转化为F; 0001转化为1 ;1000转化为8;11101010转化为EA。对于一个二进制的数位数若不是4的倍数,可以在前面补零,补成4的倍数位。例如:1111011111补为为001111011111转化为十六进制:3DF

解题代码二:

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		int n=input.nextInt();
		while(n>0){
			String k=input.next();
			System.out.println(turn2to16(k));
			n--;
		}
		input.close();
	}

	private static String turn2to16(String str) {
		String sum="";
		
		int t=str.length()%4;
		if(t!=0){
			for(int i=str.length();i-4>=0;i=i-4){
				String s=str.substring(i-4,i);
				int tem=Integer.parseInt(String.valueOf(s), 2);
				sum=Integer.toHexString(tem).toUpperCase()+sum;
			}
			String st=str.substring(0,t);
			
			int tem=Integer.parseInt(String.valueOf(st), 2);
			sum=Integer.toHexString(tem).toUpperCase()+sum;
			
		}
		else{
			for(int i=str.length();i-4>=-1;i=i-4){
				String s=str.substring(i-4,i);
				int tem=Integer.parseInt(String.valueOf(s), 2);
				sum=Integer.toHexString(tem).toUpperCase()+sum;
			}
		}
		return sum;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康雨城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值