From 2672cb71cc1ac675fd6550d02790f69ba76abc88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E4=BF=8A=E8=B0=95?= <2740338558@qq.com> Date: Thu, 10 Oct 2024 16:51:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jinzhi.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 jinzhi.java 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); + } +}