通过万岁!!!
- 题目:给定一个16进制的数,转换成八进制。
- 思路:这个题不要试图什么数学方法,就是我们先转换成2进制,16禁止转换到2禁止,需要2进制的4位,然后再每次拿三个,转换成八进制。
- 技巧:使用map存储16进制对应的2进制,然后另外一个map存储2进制对应的8进制。
- 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T51
- 举例:123ABC->0001,0010,0011,1010,1011,1100->000,100,100,011,101,010,111,100->04435274->4435274.
java代码
import java.util.HashMap;
import java.util.Scanner;
/**
* @创建人 xcs
* @创建日期 2022/3/5
* @创建时间 20:34
* 题目链接:http://lx.lanqiao.cn/problem.page?gpid=T51
*/
public class BASIC12 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = Integer.parseInt(scan.nextLine());
String[] numStr = new String[n];
for (int i = 0; i < n; i++) {
numStr[i] = scan.nextLine();
}
// 16进制转2进制map
HashMap<Character, String> sixteenMap = new HashMap();
sixteenMap.put('0', "0000");
sixteenMap.put('1', "0001");
sixteenMap.put('2', "0010");
sixteenMap.put('3', "0011");
sixteenMap.put('4', "0100");
sixteenMap.put('5', "0101");
sixteenMap.put('6', "0110");
sixteenMap.put('7', "0111");
sixteenMap.put('8', "1000");
sixteenMap.put('9', "1001");
sixteenMap.put('A', "1010");
sixteenMap.put('B', "1011");
sixteenMap.put('C', "1100");
sixteenMap.put('D', "1101");
sixteenMap.put('E', "1110");
sixteenMap.put('F', "1111");
// 二进制转八进制map
HashMap<String, String> eightMap = new HashMap();
eightMap.put("000", "0");
eightMap.put("001", "1");
eightMap.put("010", "2");
eightMap.put("011", "3");
eightMap.put("100", "4");
eightMap.put("101", "5");
eightMap.put("110", "6");
eightMap.put("111", "7");
// 2进制数存储在sb中
StringBuilder sb;
for (int i = 0; i < n; i++) {
// 得到一个数
sb = new StringBuilder();
for (int j = 0; j < numStr[i].length(); j++) {
sb.append(sixteenMap.get(numStr[i].charAt(j)));
}
// sb中已经是2进制存储了,补齐位数
int length = sb.length();
if (length % 3 == 1) {
sb.insert(0, "00");
} else if (length % 3 == 2) {
sb.insert(0, "0");
}
// flag检测前面的0
int flag = 0;
for (int j = 0; j <= sb.length() - 3; j += 3) {
String s = eightMap.get(sb.substring(j, j + 3));
if (!"0".equals(s)) {
flag = 1;
}
if (flag == 1) {
System.out.print(s);
}
}
System.out.println();
}
}
}
- 总结::就是用一个二进制进行过渡。