diff --git a/jinzhi.java b/jinzhi.java index edc6306..c256b5c 100644 --- a/jinzhi.java +++ b/jinzhi.java @@ -1,13 +1,70 @@ +import java.util.Scanner; + public class jinzhi { + + // 将数字从 'fromBase' 转换为 'toBase' + public static String convertBase(String number, int fromBase, int toBase) { + // 第一步:从 'fromBase' 转换为十进制(base 10) + int decimalNumber = 0; + int length = number.length(); + + // 将输入数字转换为十进制 + for (int i = 0; i < length; i++) { + char digit = number.charAt(length - 1 - i); + int value; + if (Character.isDigit(digit)) { + value = digit - '0'; // 将字符转换为 0-9 的整数 + } else { + value = Character.toUpperCase(digit) - 'A' + 10; // 将字符转换为 A-F 的整数 + } + decimalNumber += value * Math.pow(fromBase, i); + } + + // 第二步:从十进制转换为目标进制 + if (decimalNumber == 0) { + return "0"; // 如果数字为零,返回 "0" + } + + StringBuilder result = new StringBuilder(); + + // 将十进制数字转换为目标基数 + while (decimalNumber > 0) { + int remainder = decimalNumber % toBase; + if (remainder < 10) { + result.append((char) (remainder + '0')); // 添加 0-9 的数字 + } else { + result.append((char) (remainder - 10 + 'A')); // 添加 A-F 的字母 + } + decimalNumber /= toBase; + } + + // 反转结果,因为我们是从后向前构建的 + return result.reverse().toString(); + } + public static void main(String[] args) { - int a = 15; - int x = 0; - int i=0; - while (a > 0) { - x = (int) (x + (a % 2) * Math.pow(10,i)); - a = a / 2; - i=i+1; - } - System.out.print("jinzhi11111十进制a转换二进制x为:" + x); + Scanner scanner = new Scanner(System.in); + + // 输入数字和基数 + System.out.print("请输入数字: "); + String number = scanner.nextLine(); + + System.out.print("请输入原始进制 (2 到 16): "); + int fromBase = scanner.nextInt(); + + System.out.print("请输入目标进制 (2 到 16): "); + int toBase = scanner.nextInt(); + + // 验证基数 + if (fromBase < 2 || fromBase > 16 || toBase < 2 || toBase > 16) { + System.out.println("基数必须在 2 到 16 之间。"); + return; + } + + // 转换数字并打印结果 + String result = convertBase(number, fromBase, toBase); + System.out.println("进制为 " + fromBase + " 的数: " + number + " 在进制为 " + toBase + " 的数是: " + result ); + + scanner.close(); } -} \ No newline at end of file +}