【蓝桥杯】基础练习 十六进制转八进制(Java实现)

【蓝桥杯】基础练习 十六进制转八进制(Java实现)_第1张图片
分析:
一开始看到这个题目我认为比较简单,不顾题目的疯狂暗示的“先将十六进制数转换成某进制数,再由某进制数转换成八进制。”的提示,自己的想法是把16进制先转化为10进制,再从10进制转化为8进制。用了Java自带的函数实现了代码,用样例测试也通过了,但是提交的代码显示运行错误。打开测评的输入数据一看,明白了错误所在。
【蓝桥杯】基础练习 十六进制转八进制(Java实现)_第2张图片题中说了“每个十六进制数长度不超过100000”,这个长度哪怕是long类型也容纳不下,
所以不能先转换成10进制,再转换成8进制。那么,我们应该采用其他方法,既然整型走不通,所以我们可以采用字符型,将输入的16进制数看成字符串,转换后的2进制字符串,每三位二进制数可以组成一位新的八进制字符。由于二进制转换为8进制是每三个二进制一组的,所以当二进制字符串的长度不是3的整数倍的时候,就要在字符串的前面补上相应个数的 ‘0’ 来让二进制字符串的长度变成3的整数倍。当上续过程转换完毕后,不要让8进制字符串前面的 ‘0’ 字符输出。

Java代码实现:

import java.util.Scanner; 

public class Main { 
	//定义常量字符串数组
	static String[] bin = { "0000", "0001", "0010", "0011", "0100", "0101", 
			"0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101",
			"1110", "1111" }; 
	static String[] oct = { "0", "1", "2", "3", "4", "5", "6", "7" }; 
	
	public static void main(String[] args) { 
		Scanner s = new Scanner(System.in); 
		int n = s.nextInt(); 			//n个十六进制正整数
		String[] str = new String[n]; 	//接收十六进制正整数的数组
		
		//接收十六进制正整数
		for (int i = 0; i < n; i++) { 
			str[i] = s.next(); 
		}    		
		
		for(int i=0; i

代码中的调用的几个方法这里再解释一下:

  1. public String substring(int beginIndex)

public String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

示例:
“unhappy”.substring(2) returns “happy”
“Harbison”.substring(3) returns “bison”
“emptiness”.substring(9) returns “” (an empty string)

  1. public String substring(int beginIndex,int endIndex)
    public String substring(int beginIndex,int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。

示例:
“hamburger”.substring(4, 8) returns “urge”
“smiles”.substring(1, 5) returns “mile”

你可能感兴趣的:(算法,蓝桥杯)