蓝桥杯---十六进制转八进制

蓝桥杯---十六进制转八进制_第1张图片
package com.huat.lanqiao;

import java.util.Scanner;

/*
*@author: 
*@see功能介绍:将十六进制转换为八进制
*@vesion版本号:JDK1.8
*2018年2月15日
*/
public class HexToOct {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String[] temp = new String[n+1];
		int i;
		//接收输入
		for( i = 0; i < n; i++) {
			temp[i] = sc.next();
		}
		sc.close();
		
		for(i =0; i < n;i++) {
			String strBinary = toBinary(temp[i]);	//得到二进制
			int length = strBinary.length();
                        //这样的做法保证得到的二进制位数是3的整数倍
			if(length % 3 == 1) {
				strBinary = "00" + strBinary;
			}
			if (length % 3 == 2) {
				strBinary = "0" + strBinary;
			}
			String strOct = toOct(strBinary);//二进制转换八进制
			System.out.println(strOct);
			
			
		}
	}
	
	public static String toBinary(String t) {
		int strlen = t.length();
		StringBuffer str = new StringBuffer();
		for (int i = 0; i < strlen; i++) {
			switch(t.charAt(i)) {
				case '0' : str.append("0000");break;
				case '1' : str.append("0001");break;
				case '2' : str.append("0010");break;
				case '3' : str.append("0011");break;
				case '4' : str.append("0010");break;
				case '5' : str.append("0101");break;
				case '6' : str.append("0110");break;
				case '7' : str.append("0111");break;
				case '8' : str.append("1000");break;
				case '9' : str.append("1001");break;
				case 'A' : str.append("1010");break;
				case 'B' : str.append("1011");break;
				case 'C' : str.append("1100");break;
				case 'D' : str.append("1101");break;
				case 'E' : str.append("1110");break;
				case 'F' : str.append("1111");break;
				default:break;
			}
		}
		return str.toString();
	}
	
	public static String toOct(String s) {
		int strlen = s.length();
		int k;
		StringBuffer str = new StringBuffer();
		//过滤掉开始就是000XXXX的情况
		if(s.subSequence(0, 3).equals("000")) {
			k = 3;
		} else {
			k = 0;
		}
		for (int i = k; i < strlen-2; i+=3) {
			String ss = s.substring(i,i+3);
	//		System.out.println(ss);
			if(ss.equals("000")) str.append("0");
			else if(ss.equals("001")) str.append("1");
			else if(ss.equals("010")) str.append("2");
			else if(ss.equals("011")) str.append("3");
			else if(ss.equals("100")) str.append("4");
			else if(ss.equals("101")) str.append("5");
			else if(ss.equals("110")) str.append("6");
			else if(ss.equals("111")) str.append("7");	
		}
		return str.toString();
	}
}

你可能感兴趣的:(练习题)