基础练习 十六进制转八进制
Posted reton
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础练习 十六进制转八进制相关的知识,希望对你有一定的参考价值。
一开始这道题我是想着用系统自带的函数去做的,事实告诉我偷懒是别想偷懒的。
所以老老实实的回来想题目。这道题其实不是什么难题,主要是涉及到一些字符串格式的运用。大概的思路就是把16进制变为二进制,再把二进制变为八进制。
把十六进制转换为二进制:是通过将十六进制数逐一变成4位的二进制数,所以这里将输入的字符串变为字符数组。其中通过StringBuilder来定义二进制数,因为StringBuilder有append函数,可以一次将一个字符串加入到总字符串中。
把二进制转换为八进制:是通过将每3位二进制数转换为一个八进制数,所以这里是用字符串操作。利用String的subString操作,一次可以通过对一个短字符串进行判定。
以下源代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 1; i <= n; i++) {
String s16 = sc.next();
char[] c16 = s16.toCharArray();
StringBuilder s2 = toBinary(c16);
String s8 = toOctal(s2);
System.out.println(s8);
}
}
public static StringBuilder toBinary(char[] c16) {
StringBuilder s2 = new StringBuilder();
for (int j = 0; j < c16.length; j++) {
switch(c16[j]) {
case '0':
s2.append("0000");
break;
case '1':
s2.append("0001");
break;
case '2':
s2.append("0010");
break;
case '3':
s2.append("0011");
break;
case '4':
s2.append("0100");
break;
case '5':
s2.append("0101");
break;
case '6':
s2.append("0110");
break;
case '7':
s2.append("0111");
break;
case '8':
s2.append("1000");
break;
case '9':
s2.append("1001");
break;
case 'A':
s2.append("1010");
break;
case 'B':
s2.append("1011");
break;
case 'C':
s2.append("1100");
break;
case 'D':
s2.append("1101");
break;
case 'E':
s2.append("1110");
break;
case 'F':
s2.append("1111");
break;
}
}
return s2;
}
public static String toOctal(StringBuilder sb2) {
String s2 = sb2.toString();
StringBuilder sb8 = new StringBuilder();
if (sb2.length() % 3 == 2) {
s2 = sb2.insert(0, "0").toString();
} else if (sb2.length() % 3 == 1) {
sb2.insert(0, "0");
sb2.insert(0, "0");
s2 = sb2.toString();
}
for (int i = 0; i < s2.length(); i += 3) {
switch(s2.substring(i, i+3)) {
case "000": sb8.append(0);break;
case "001": sb8.append(1);break;
case "010": sb8.append(2);break;
case "011": sb8.append(3);break;
case "100": sb8.append(4);break;
case "101": sb8.append(5);break;
case "110": sb8.append(6);break;
case "111": sb8.append(7);break;
}
}
if (sb8.toString().startsWith("0")) {
return sb8.toString().substring(1, sb8.length());
}
return sb8.toString();
}
}
------------恢复内容结束------------
以上是关于基础练习 十六进制转八进制的主要内容,如果未能解决你的问题,请参考以下文章