import java.util.Scanner;
public class BaseConverter {
public static void main(String[] args) {
Scanner input = new Scanner(System.in); // 创建一个扫描器对象,用于获取用户输入
System.out.println("欢迎使用转换进制的程序!");
System.out.println("如果你想退出程序,请输入q或Q");
//通过不断地将十进制数除以目标进制,
// 然后取余数,直到商为0,每次得到的余数就是转换后的结果的一位,
// 从低位至高位依次排列
//如果余数小于10,就用数字字符表示,否则用字母字符表示
while (true) { // 无限循环,直到用户输入q或Q退出程序
int decimal = 0; // 用户输入的十进制数
int base = 0; // 用户输入的目标进制
boolean valid = false; // 用户输入是否合法
// 获取用户输入的十进制数
System.out.println("请输入一个十进制的正整数,例如:10");
while (!valid) { // 循环,直到用户输入合法的十进制数
System.out.print("请输入:");
String line = input.nextLine(); // 获取用户输入的一行字符串
if (line.equalsIgnoreCase("q")) { // 如果用户输入q或Q,表示想要退出程序
System.out.println("感谢使用转换进制的程序,再见!");
input.close(); // 关闭扫描器对象
return; // 结束程序
}
try {
decimal = Integer.parseInt(line); // 尝试将用户输入的字符串转换为整数
if (decimal <= 0) { // 如果整数小于等于零,表示不合法
System.out.println("十进制数必须为正数,请重新输入!");
} else { // 如果整数大于零,表示合法
valid = true; // 设置用户输入为合法
}
} catch (Exception e) { // 如果转换过程中发生异常,表示用户输入不是整数,不合法
System.out.println("十进制数必须为整数,请重新输入!");
}
}
// 获取用户输入的目标进制
valid = false; // 重置用户输入是否合法
System.out.println("请输入一个目标进制(2到16之间),例如:2");
while (!valid) { // 循环,直到用户输入合法的目标进制
System.out.print("请输入:");
String line = input.nextLine(); // 获取用户输入的一行字符串
if (line.equalsIgnoreCase("q")) { // 如果用户输入q或Q,表示想要退出程序
System.out.println("感谢使用转换进制的程序,再见!");
input.close(); // 关闭扫描器对象
return; // 结束程序
}
try {
base = Integer.parseInt(line); // 尝试将用户输入的字符串转换为整数
if (base < 2 || base > 16) { // 如果整数小于2或大于16,表示不合法
System.out.println("目标进制必须在2到16之间,请重新输入!");
} else { // 如果整数在2到16之间,表示合法
valid = true; // 设置用户输入为合法
}
} catch (Exception e) { // 如果转换过程中发生异常,表示用户输入不是整数,不合法
System.out.println("目标进制必须为整数,请重新输入!");
}
}
// 转换进制并输出结果
String result = ""; // 存储转换后的结果
int remainder = 0; // 存储每次除法的余数
char digit = ' '; // 存储每一位的字符表示
while (decimal > 0) { // 循环,直到十进制数为零
remainder = decimal % base; // 计算余数
if (remainder < 10) { // 如果余数小于10,用数字字符表示
digit = (char) ('0' + remainder);
} else { // 如果余数大于等于10,用字母字符表示
digit = (char) ('A' + remainder - 10);
}
result = digit + result; // 将余数添加到结果的最前面
decimal = decimal / base; // 计算商
}
System.out.println("转换后的结果是:" + result); // 输出结果
}
}
}