您的位置:首页 > 其它

十六进制转八进制

2015-02-16 12:30 218 查看
package org.bluebridge.lx;

/*
* 十六进制转八进制

问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
* */

import java.util.Scanner;

public class BASIC_12 {
static String bin[] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100",
"1101", "1110", "1111" };

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());

String[] data = new String
;
for (int i = 0; i < data.length; i++)
data[i] = sc.nextLine();
sc.close();
for (int i = 0; i < n; i++) {
tobin(data[i].toCharArray());
}
}

// 转成二进制
private static void tobin(char[] data) {
StringBuilder two = new StringBuilder();
for (int j = 0; j < data.length; j++) {
int index = (int) data[j];
index = index <= 57 ? index - 48 : index - 55;
two.append(bin[index]);
}

// 去掉二进制前面的0
for (int j = 0; j < two.length(); j++)
if (two.charAt(j) != '0') {
two = two.delete(0, j);
break;
}
tooct(two);
}

//转成八进制
private static void tooct(StringBuilder two) {
int c0 = two.length() % 3;
if (c0 == 1)
two.insert(0, "00");
else if (c0 == 2)
two.insert(0, "0");

int n = two.length() / 3;
String temp = "";
StringBuilder octstr = new StringBuilder();
for (int j = 0; j < n; j++) {
temp = two.substring(j * 3, j * 3 + 3);
switch (temp) {
case "000":
octstr.append("0");
break;
case "001":
octstr.append("1");
break;
case "010":
octstr.append("2");
break;
case "011":
octstr.append("3");
break;
case "100":
octstr.append("4");
break;
case "101":
octstr.append("5");
break;
case "110":
octstr.append("6");
break;
case "111":
octstr.append("7");
break;
}
}
System.out.println(octstr);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息