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.
59 lines
1.9 KiB
59 lines
1.9 KiB
import java.util.Scanner;
|
|
|
|
public class BaseConversion {
|
|
|
|
// 将任意R进制数转换为十进制数
|
|
public static int convertToDecimal(String numStr, int base) {
|
|
return Integer.parseInt(numStr, base);
|
|
}
|
|
|
|
// 将十进制数转换为任意R进制数
|
|
public static String convertFromDecimal(int num, int base) {
|
|
if (num == 0) {
|
|
return "0";
|
|
}
|
|
StringBuilder result = new StringBuilder();
|
|
while (num > 0) {
|
|
int remainder = num % base;
|
|
if (remainder < 10) {
|
|
result.append(remainder);
|
|
} else {
|
|
result.append((char) ('A' + (remainder - 10))); // A-F 对应 10-15
|
|
}
|
|
num /= base;
|
|
}
|
|
return result.reverse().toString(); // 反转结果
|
|
}
|
|
|
|
// 将一个R进制数转换为另一个R进制数
|
|
public static String convertBase(String numStr, int fromBase, int toBase) {
|
|
int decimalNumber = convertToDecimal(numStr, fromBase);
|
|
return convertFromDecimal(decimalNumber, toBase);
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
Scanner scanner = new Scanner(System.in);
|
|
|
|
System.out.print("请输入要转换的数字: ");
|
|
String numStr = scanner.nextLine();
|
|
|
|
System.out.print("请输入源进制 (2-16): ");
|
|
int fromBase = scanner.nextInt();
|
|
|
|
System.out.print("请输入目标进制 (2-16): ");
|
|
int toBase = scanner.nextInt();
|
|
|
|
// 验证进制范围
|
|
if (fromBase < 2 || fromBase > 16 || toBase < 2 || toBase > 16) {
|
|
System.out.println("进制必须在 2 到 16 之间。");
|
|
} else {
|
|
String result = convertBase(numStr, fromBase, toBase);
|
|
System.out.println(numStr + " 从 " + fromBase + " 进制转换到 " + toBase + " 进制的结果是: " + result);
|
|
}
|
|
|
|
scanner.close();
|
|
|
|
//This is a test
|
|
}
|
|
}
|