java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

根据正常的思路,大家都能想到先转换成二进制在转换成八进制,但是其中涉及到效率的问题,前前后后经过了十几次测试,大多数都是超时,经过优化的代码最终通过了测试,请记住StringI和Number的API很耗时,慎用

第一次代码:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		new Main().cal();
	}
	
	public void cal(){
		Scanner sc = new Scanner(System.in);
		
		int len = sc.nextInt();
		String[] list = new String[len];
		for (int i = 0; i < list.length; i++) {
			list[i] = sc.next();
		}

		String[] arr = new String[len];
		
		for (int i = 0; i < list.length; i++) {
			String str = list[i];
			StringBuilder result = new StringBuilder();
			for (int j = 0; j < str.length(); j++) {
				char ch = str.charAt(j);
				if(ch == &#39;a&#39; || ch == &#39;A&#39;){
					result.append("1010");
				}else if(ch == &#39;b&#39; || ch == &#39;B&#39;){
					result.append("1011");				
				}else if(ch == &#39;C&#39; || ch == &#39;C&#39;){
					result.append("1100");				
				}else if(ch == &#39;d&#39; || ch == &#39;D&#39;){
					result.append("1101");			
				}else if(ch == &#39;e&#39; || ch == &#39;E&#39;){
					result.append("1110");
				}else if(ch == &#39;f&#39; || ch == &#39;F&#39;){
					result.append("1111");
				}else if(ch == &#39;1&#39;){
					result.append("0001");
				}else if(ch == &#39;2&#39;){
					result.append("0010");
				}else if(ch == &#39;3&#39;){
					result.append("0011");
				}else if(ch == &#39;4&#39;){
					result.append("0100");
				}else if(ch == &#39;5&#39;){
					result.append("0101");
				}else if(ch == &#39;6&#39;){
					result.append("0110");
				}else if(ch == &#39;7&#39;){
					result.append("0111");
				}else if(ch == &#39;8&#39;){
					result.append("1000");
				}else if(ch == &#39;9&#39;){
					result.append("1001");
				}else if(ch == &#39;0&#39;){
					result.append("0000");
				}
			}
			if(result.length() % 3 != 0){
				result.insert(0, "0");
			}
			if(result.length() % 3 != 0){
				result.insert(0, "0");
			}
			arr[i] = "" + result;
		}
		
		BigInteger[] ll = new BigInteger[len];
		
		for(int t = 0; t< arr.length ;t ++){
			String str = arr[t];
			StringBuffer buf = new StringBuffer();
			for(int x = 0;x<str.length() - 2;x+=3){
				int fir = Integer.parseInt(str.charAt(x) +"");
				int sec = Integer.parseInt(str.charAt(x+1) +"");
				int thr = Integer.parseInt(str.charAt(x+2) +"");
				
				int r = fir *4 + sec * 2 + thr;
				buf.append(r);
			}
			ll[t] = new BigInteger(buf.toString());
		}
		
		
		
		printArray(ll);
	}
	
	
    private void printArray(BigInteger[] arr){
    	for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
    }
}

第n次代码(可通过测试):

import java.util.Scanner;

public class Main {
	static StringBuilder[] octals = null;//保存八进制数
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int len = sc.nextInt();
		octals = new StringBuilder[len];
		for (int i = 0; i < len; i++) {
			trans(sc.next(),i);
		}
		for (int i = 0; i < octals.length; i++) {
			System.out.println(octals[i]);
		}
	}
	public static void trans(String value,int i){
		StringBuilder sb = new StringBuilder();
		StringBuilder result = new StringBuilder();
		char[] c = value.toCharArray();
		for (int j = 0; j < value.length(); j++) {
			switch(c[j]){
			case &#39;1&#39; : result.append("0001");break;
			case &#39;2&#39; : result.append("0010");break;
			case &#39;3&#39; : result.append("0011");break;
			case &#39;4&#39; : result.append("0100");break;
			case &#39;5&#39; : result.append("0101");break;
			case &#39;6&#39; : result.append("0110");break;
			case &#39;7&#39; : result.append("0111");break;
			case &#39;8&#39; : result.append("1000");break;
			case &#39;9&#39; : result.append("1001");break;
			case &#39;0&#39; : result.append("0000");break;
			case &#39;A&#39; : result.append("1010");break;
			case &#39;B&#39; : result.append("1011");break;
			case &#39;C&#39; : result.append("1100");break;
			case &#39;D&#39; : result.append("1101");break;
			case &#39;E&#39; : result.append("1110");break;
			case &#39;F&#39; : result.append("1111");break;
			}
		}
		if(result.length() % 3 != 0){
			result.insert(0, "0");
		}
		if(result.length() % 3 != 0){
			result.insert(0, "0");
		}
		
		for (int j = 0; j < result.length() -2; j += 3) {
			String s = result.substring(j,j+3);
			if(s.equals("000")){
				if(j !=0){
					sb.append(&#39;0&#39;);//如果是第一位就不要放0
				}
			}
			else if(s.equals("001"))
				sb.append(&#39;1&#39;);
			else if(s.equals("010"))
				sb.append(&#39;2&#39;);
			else if(s.equals("011"))
				sb.append(&#39;3&#39;);
			else if(s.equals("100"))
				sb.append(&#39;4&#39;);
			else if(s.equals("101"))
				sb.append(&#39;5&#39;);
			else if(s.equals("110"))
				sb.append(&#39;6&#39;);
			else if(s.equals("111"))
				sb.append(&#39;7&#39;);				
		}
		octals[i] = sb;
	}
}

此次的代码没有使用官方的工具类

感觉用官方工具类的话跟外挂没区别

像第二步完全可以用以下方法来实现

1.System.out.printf("%o");

2.Integer.toOctalString();

java蓝桥杯

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。