diff --git a/jinzhi.java b/jinzhi.java new file mode 100644 index 0000000..67f36e5 --- /dev/null +++ b/jinzhi.java @@ -0,0 +1,63 @@ +import java.util.Scanner; + +public class jinzhi { + + // 将R进制数X转换为十进制 + private static int toDecimal(String number, int base) { + int decimalValue = 0; + int power = 1; // 当前位的权重 + + for (int i = number.length() - 1; i >= 0; i--) { + char digit = number.charAt(i); + int digitValue; + + if (Character.isDigit(digit)) { + digitValue = digit - '0'; // 数字字符转为整数 + } else { + digitValue = Character.toUpperCase(digit) - 'A' + 10; // 字母字符转为整数 + } + + decimalValue += digitValue * power; + power *= base; // 更新权重 + } + + return decimalValue; + } + + // 将十进制数转换为S进制 + private static String fromDecimal(int number, int base) { + StringBuilder result = new StringBuilder(); + + while (number > 0) { + int remainder = number % base; + if (remainder < 10) { + result.append((char) ('0' + remainder)); + } else { + result.append((char) ('A' + remainder - 10)); + } + number /= base; + } + + return result.reverse().toString(); // 反转结果 + } + + // 主方法 + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + System.out.print("请输入源进制R (2-16): "); + int baseR = scanner.nextInt(); + + System.out.print("请输入需要转换的数X (R进制): "); + String numberX = scanner.next(); + + System.out.print("请输入目标进制S (2-16): "); + int baseS = scanner.nextInt(); + + // 转换过程 + int decimalValue = toDecimal(numberX, baseR); + String result = fromDecimal(decimalValue, baseS); + + System.out.println("转换结果: " + result); + } +}