|
|
import java.util.Scanner;
|
|
|
|
|
|
public class BaseConverter {
|
|
|
|
|
|
// 字符数组,用于表示大于9的数字
|
|
|
private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
|
|
|
|
|
/**
|
|
|
* 将给定进制的字符串转换为十进制整数
|
|
|
*
|
|
|
* @param str 给定进制的字符串表示
|
|
|
* @param base 给定进制的基数
|
|
|
* @return 十进制整数
|
|
|
*/
|
|
|
public static int toDecimal(String str, int base) {
|
|
|
int result = 0;
|
|
|
int power = 0;
|
|
|
|
|
|
for (int i = str.length() - 1; i >= 0; i--) {
|
|
|
char c = str.charAt(i);
|
|
|
int digit = Character.isDigit(c) ? c - '0' : c - 'A' + 10;
|
|
|
result += digit * Math.pow(base, power++);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
/**
|
|
|
* 将十进制整数转换为目标进制的字符串
|
|
|
*
|
|
|
* @param decimal 十进制整数
|
|
|
* @param targetBase 目标进制的基数
|
|
|
* @return 目标进制的字符串表示
|
|
|
*/
|
|
|
public static String fromDecimal(int decimal, int targetBase) {
|
|
|
if (decimal == 0) {
|
|
|
return "0";
|
|
|
}
|
|
|
|
|
|
StringBuilder result = new StringBuilder();
|
|
|
while (decimal > 0) {
|
|
|
result.insert(0, DIGITS[decimal % targetBase]);
|
|
|
decimal /= targetBase;
|
|
|
}
|
|
|
|
|
|
return result.toString();
|
|
|
}
|
|
|
/**
|
|
|
* 将任意进制的数转换为另一个任意进制的数
|
|
|
*
|
|
|
* @param str 给定进制的字符串表示
|
|
|
* @param sourceBase 给定进制的基数
|
|
|
* @param targetBase 目标进制的基数
|
|
|
* @return 目标进制的字符串表示
|
|
|
*/
|
|
|
public static String convertBase(String str, int sourceBase, int targetBase) {
|
|
|
int decimalValue = toDecimal(str, sourceBase);
|
|
|
return fromDecimal(decimalValue, targetBase);
|
|
|
}
|
|
|
} |