import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class A02进制转换 {
// 输入一个数,求它的二进制,八进制,十六进制
// 一定要去使用动态数组 常见的ArrayList LinkedList HashSet TreeSet HashMap
public static void main(String[] args) {
System.out.println("请输入一个十进制的数,我来帮你转换为其他进制:");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
sc.close();
System.out.println("它的二进制为:" + Integer.toBinaryString(a));
System.out.println("它的八进制为:" + Integer.toOctalString(a));
System.out.println("它的十六进制为:" + Integer.toHexString(a));
System.out.println("我自己的程序转二进制" + toJinZhi(a, 2));
System.out.println("我自己的程序转十进制" + toJinZhi(a, 8));
System.out.println("我自己的程序转十六进制" + toHex(a));
}
// 把十进制的数字x转为二进制的形式
private static String toJinZhi(int x, int jz) {
ArrayList<Integer> list = new ArrayList<>();// 新建一个动态数组
int yu; // 余数
while (true) { // 设计死循环,循环结果的条件是除法结果为0
if (x == 0) {// 当除法的结果为0时,循环结束
break;
}
yu = x % jz; // 得到余数
list.add(yu);// 把余数加入到动态数组中去
x = x / jz;// 为下次的取模做准备
}
Collections.reverse(list); // 将list的内容进行反转
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i)); // 将动态数组中的内容拼装到字符串
}
return sb.toString();
}
// 把六进制的数字x转为二进制的形式
private static String toHex(int x) {
char[] cc = new char[16];
char temp = 'A';
for (int i = 10; i <= 15; i++) {
cc[i] = temp;
temp++;
}
ArrayList<Integer> list = new ArrayList<>();// 新建一个动态数组
int yu; // 余数
while (true) { // 设计死循环,循环结果的条件是除法结果为0
if (x == 0) {// 当除法的结果为0时,循环结束
break;
}
yu = x % 16; // 得到余数
list.add(yu);// 把余数加入到动态数组中去
x = x / 16;// 为下次的取模做准备
}
Collections.reverse(list); // 将list的内容进行反转
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
int t = list.get(i);
if (t > 9) {
sb.append(cc[list.get(i)]);
} else {
sb.append(list.get(i));
}
}
return sb.toString();
}
}