import java.util.Scanner; public class Git { // 将任意进制字符串转换为十进制整数 public static int toDecimal(String number, int base) { int decimal = 0; int power = 0; // 从字符串的末尾开始处理 for (int i = number.length() - 1; i >= 0; i--) { char digit = number.charAt(i); // 如果是数字字符(0-9) if (Character.isDigit(digit)) { int value = Character.getNumericValue(digit); decimal += value * Math.pow(base, power); } // 如果是字母字符(A-F 或 a-f),表示10-15 else if (Character.isLetter(digit)) { char upperDigit = Character.toUpperCase(digit); int value = upperDigit - 'A' + 10; decimal += value * Math.pow(base, power); } else { throw new IllegalArgumentException("Invalid character in number: " + digit); } power++; } return decimal; } // 将十进制整数转换为任意进制字符串 public static String fromDecimal(int number, int base) { if (number == 0) { return "0"; } StringBuilder result = new StringBuilder(); char[] digits = "0123456789ABCDEF".toCharArray(); // 支持到16进制 boolean isNegative = number < 0; if (isNegative) { number = -number; } while (number > 0) { int remainder = number % base; result.insert(0, digits[remainder]); number /= base; } if (isNegative) { result.insert(0, '-'); } return result.toString(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入源进制(2-16):"); int sourceBase = scanner.nextInt(); scanner.nextLine(); // 消耗掉换行符 System.out.print("请输入目标进制(2-16):"); int targetBase = scanner.nextInt(); scanner.nextLine(); // 消耗掉换行符 System.out.print("请输入要转换的" + sourceBase + "进制数字:"); String number = scanner.nextLine().trim(); // 读取实际的数字输入 // 验证源进制数字是否有效 for (char c : number.toCharArray()) { if (!Character.isDigit(c) && !(Character.isLetter(c) && (Character.toUpperCase(c) >= 'A' && Character.toUpperCase(c) <= 'F') && sourceBase > 10)) { throw new IllegalArgumentException("Invalid character in source base number: " + c); } } // 将源进制数字转换为十进制 int decimalNumber = toDecimal(number, sourceBase); // 将十进制数字转换为目标进制 String convertedNumber = fromDecimal(decimalNumber, targetBase); System.out.println("转换后的" + targetBase + "进制数字是:" + convertedNumber); scanner.close(); } }