You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
3.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import java.util.Scanner;
public class uml10_10 {
// 将任意进制字符串转换为十进制整数
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();
}
}