From 7507aea56119fdd65b3550bba501a5dd9e0c0e9c Mon Sep 17 00:00:00 2001 From: zxl <1255630140@qq.com> Date: Fri, 11 Oct 2024 15:25:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E4=BA=86=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E6=96=87=E4=BB=B6BaseConverter.java=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BaseConverter.java | 75 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 BaseConverter.java diff --git a/BaseConverter.java b/BaseConverter.java new file mode 100644 index 0000000..816acb7 --- /dev/null +++ b/BaseConverter.java @@ -0,0 +1,75 @@ +import java.util.Scanner; + +public class BaseConverter { + + // 将任意进制数转换为十进制数 + public static long convertToDecimal(String number, int base) { + long decimal = 0; + int length = number.length(); + + for (int i = 0; i < length; i++) { + char digit = number.charAt(length - 1 - i); + int value; + + if (digit >= '0' && digit <= '9') { + value = digit - '0'; + } else if (digit >= 'A' && digit <= 'F') { + value = digit - 'A' + 10; + } else if (digit >= 'a' && digit <= 'f') { + value = digit - 'a' + 10; + } else { + throw new IllegalArgumentException("Invalid character in number: " + digit); + } + + decimal += value * Math.pow(base, i); + } + + return decimal; + } + + // 将十进制数转换为任意进制数 + public static String convertToBase(long decimal, int base) { + if (base < 2 || base > 16) { + throw new IllegalArgumentException("Base must be between 2 and 16"); + } + + StringBuilder result = new StringBuilder(); + char[] digits = "0123456789ABCDEF".toCharArray(); + + while (decimal > 0) { + int remainder = (int) (decimal % base); + result.insert(0, digits[remainder]); + decimal /= base; + } + + if (result.length() == 0) { + result.append('0'); + } + + return result.toString(); + } + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Enter the number X: "); + String numberX = scanner.nextLine(); + + System.out.print("Enter the base of X (2-16): "); + int baseX = scanner.nextInt(); + + System.out.print("Enter the desired base Y (2-16): "); + int baseY = scanner.nextInt(); + + try { + long decimal = convertToDecimal(numberX, baseX); + String numberY = convertToBase(decimal, baseY); + + System.out.println("The number " + numberX + " in base " + baseX + " is " + numberY + " in base " + baseY); + } catch (Exception e) { + System.err.println("Error: " + e.getMessage()); + } + + scanner.close(); + } +} \ No newline at end of file