蓝桥杯 基础练习 十六进制转八进制 JAVA

本文介绍了一个Java程序,该程序能够读取用户输入的十六进制字符串,将其转换为二进制表示形式,并进一步转换为等效的八进制数。通过对十六进制字符的逐个映射,程序实现了从十六进制到二进制的转换,然后通过调整二进制字符串长度确保其可以被三整除,以便于进行八进制转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		for (int i = 0; i < n; i++) {
			f(br.readLine());
		}

	}

	private static void f(String readLine) {
		// TODO Auto-generated method stub
		StringBuffer sb = new StringBuffer();
		char c[] = readLine.toCharArray();
		for (int i = 0; i < c.length; i++) {
			switch (c[i]) {
			case '0':
				sb.append("0000");
				break;
			case '1':
				sb.append("0001");
				break;
			case '2':
				sb.append("0010");
				break;
			case '3':
				sb.append("0011");
				break;
			case '4':
				sb.append("0100");
				break;
			case '5':
				sb.append("0101");
				break;
			case '6':
				sb.append("0110");
				break;
			case '7':
				sb.append("0111");
				break;
			case '8':
				sb.append("1000");
				break;
			case '9':
				sb.append("1001");
				break;
			case 'A':
				sb.append("1010");
				break;
			case 'B':
				sb.append("1011");
				break;
			case 'C':
				sb.append("1100");
				break;
			case 'D':
				sb.append("1101");
				break;
			case 'E':
				sb.append("1110");
				break;
			case 'F':
				sb.append("1111");
				break;

			}
		}
		g(sb);
	}

	private static void g(StringBuffer sb) {
		// TODO Auto-generated method stub
		int i = sb.length();
		if (i % 3 == 0)
			if (sb.substring(0, 3).equals("000"))
				sb.delete(0, 3);
		if (i % 3 == 1)
			if (sb.substring(0, 1).equals("0"))
				sb.delete(0, 1);
			else
				sb.insert(0, "00");
		if (i % 3 == 2)
			if (sb.substring(0, 2).equals("00"))
				sb.delete(0, 2);
			else
				sb.insert(0, "0");
		int n = sb.length() / 3;
		String s1[] = new String[n];
		StringBuffer sbf = new StringBuffer();
		for (int j = 0; j < n; j++) {
			s1[j] = sb.substring(j * 3, j * 3 + 3);
			if (s1[j].equals("000"))
				sbf.append("0");
			if (s1[j].equals("001"))
				sbf.append(1);
			if (s1[j].equals("010"))
				sbf.append(2);
			if (s1[j].equals("011"))
				sbf.append(3);
			if (s1[j].equals("100"))
				sbf.append(4);
			if (s1[j].equals("101"))
				sbf.append(5);
			if (s1[j].equals("110"))
				sbf.append(6);
			if (s1[j].equals("111"))
				sbf.append(7);
		}
		System.out.println(sbf);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值