B02进制转换

发布时间 2023-03-22 21:12:57作者: 缕一缕清风

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();
}

}