您的位置:首页 > 其它

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

2018-03-01 20:37 337 查看

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息