|
|
|
|
Index: Git.java
|
|
|
|
|
IDEA additional info:
|
|
|
|
|
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
|
|
|
|
<+>UTF-8
|
|
|
|
|
===================================================================
|
|
|
|
|
diff --git a/Git.java b/Git.java
|
|
|
|
|
new file mode 100644
|
|
|
|
|
--- /dev/null (date 1728549940950)
|
|
|
|
|
+++ b/Git.java (date 1728549940950)
|
|
|
|
|
@@ -0,0 +1,92 @@
|
|
|
|
|
+import java.util.Scanner;
|
|
|
|
|
+
|
|
|
|
|
+public class Git {
|
|
|
|
|
+
|
|
|
|
|
+ // 将任意进制字符串转换为十进制整数
|
|
|
|
|
+ public static int toDecimal(String number, int base) {
|
|
|
|
|
+ int decimal = 0;
|
|
|
|
|
+ int power = 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 从字符串的末尾开始处理
|
|
|
|
|
+ for (int i = number.length() - 1; i >= 0; i--) {
|
|
|
|
|
+ char digit = number.charAt(i);
|
|
|
|
|
+
|
|
|
|
|
+ // 如果是数字字符(0-9)
|
|
|
|
|
+ if (Character.isDigit(digit)) {
|
|
|
|
|
+ int value = Character.getNumericValue(digit);
|
|
|
|
|
+ decimal += value * Math.pow(base, power);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果是字母字符(A-F 或 a-f),表示10-15
|
|
|
|
|
+ else if (Character.isLetter(digit)) {
|
|
|
|
|
+ char upperDigit = Character.toUpperCase(digit);
|
|
|
|
|
+ int value = upperDigit - 'A' + 10;
|
|
|
|
|
+ decimal += value * Math.pow(base, power);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new IllegalArgumentException("Invalid character in number: " + digit);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ power++;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return decimal;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 将十进制整数转换为任意进制字符串
|
|
|
|
|
+ public static String fromDecimal(int number, int base) {
|
|
|
|
|
+ if (number == 0) {
|
|
|
|
|
+ return "0";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ StringBuilder result = new StringBuilder();
|
|
|
|
|
+ char[] digits = "0123456789ABCDEF".toCharArray(); // 支持到16进制
|
|
|
|
|
+
|
|
|
|
|
+ boolean isNegative = number < 0;
|
|
|
|
|
+ if (isNegative) {
|
|
|
|
|
+ number = -number;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ while (number > 0) {
|
|
|
|
|
+ int remainder = number % base;
|
|
|
|
|
+ result.insert(0, digits[remainder]);
|
|
|
|
|
+ number /= base;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (isNegative) {
|
|
|
|
|
+ result.insert(0, '-');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return result.toString();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
|
+ Scanner scanner = new Scanner(System.in);
|
|
|
|
|
+
|
|
|
|
|
+ System.out.print("请输入源进制(2-16):");
|
|
|
|
|
+ int sourceBase = scanner.nextInt();
|
|
|
|
|
+ scanner.nextLine(); // 消耗掉换行符
|
|
|
|
|
+
|
|
|
|
|
+ System.out.print("请输入目标进制(2-16):");
|
|
|
|
|
+ int targetBase = scanner.nextInt();
|
|
|
|
|
+ scanner.nextLine(); // 消耗掉换行符
|
|
|
|
|
+
|
|
|
|
|
+ System.out.print("请输入要转换的" + sourceBase + "进制数字:");
|
|
|
|
|
+ String number = scanner.nextLine().trim(); // 读取实际的数字输入
|
|
|
|
|
+
|
|
|
|
|
+ // 验证源进制数字是否有效
|
|
|
|
|
+ for (char c : number.toCharArray()) {
|
|
|
|
|
+ if (!Character.isDigit(c) && !(Character.isLetter(c) && (Character.toUpperCase(c) >= 'A' && Character.toUpperCase(c) <= 'F') && sourceBase > 10)) {
|
|
|
|
|
+ throw new IllegalArgumentException("Invalid character in source base number: " + c);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 将源进制数字转换为十进制
|
|
|
|
|
+ int decimalNumber = toDecimal(number, sourceBase);
|
|
|
|
|
+
|
|
|
|
|
+ // 将十进制数字转换为目标进制
|
|
|
|
|
+ String convertedNumber = fromDecimal(decimalNumber, targetBase);
|
|
|
|
|
+
|
|
|
|
|
+ System.out.println("转换后的" + targetBase + "进制数字是:" + convertedNumber);
|
|
|
|
|
+
|
|
|
|
|
+ scanner.close();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|