commit 8d8303e4b8a29f9f42fc65fa4a2c89c61eeaff2c Author: psj Date: Thu Oct 10 17:12:18 2024 +0800 第一次第二题上传 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0548357 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..8c68c6b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/jinzhi/jinzhi.iml b/jinzhi/jinzhi.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/jinzhi/jinzhi.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/jinzhi/src/JinZhi.java b/jinzhi/src/JinZhi.java new file mode 100644 index 0000000..6b26597 --- /dev/null +++ b/jinzhi/src/JinZhi.java @@ -0,0 +1,103 @@ +import java.util.Scanner; + +public class JinZhi { + + // 辅助方法:将任意进制的数转换为十进制 + /** + * 将任意进制的数转换为十进制数 + * + * @param number 要转换的数的字符串表示 + * @param base 该数的原始进制 + * @return 转换后的十进制数 + */ + public static int toDecimal(String number, int base) { + int decimalValue = 0; // 十进制结果 + int power = 0; // 当前位的权重(幂次) + + // 从字符串的最后一个字符开始遍历 + for (int i = number.length() - 1; i >= 0; i--) { + char digit = number.charAt(i); // 当前字符 + int value = 0; // 当前字符对应的十进制值 + + // 根据字符计算其十进制值 + if (Character.isDigit(digit)) { + value = digit - '0'; // 如果是数字,直接减去'0'的ASCII码 + } else if (digit >= 'A' && digit <= 'F') { + value = digit - 'A' + 10; // 如果是大写字母,减去'A'的ASCII码后加10 + } else if (digit >= 'a' && digit <= 'f') { + value = digit - 'a' + 10; // 如果是小写字母,减去'a'的ASCII码后加10 + } else { + throw new IllegalArgumentException("输入的数字中包含无效字符: " + digit); + } + + // 将当前字符的十进制值乘以权重后累加到结果中 + decimalValue += value * Math.pow(base, power); + power++; // 权重增加 + } + + return decimalValue; + } + + // 辅助方法:将十进制数转换为任意进制 + /** + * 将十进制数转换为任意进制的数 + * + * @param decimalValue 要转换的十进制数 + * @param base 目标进制 + * @return 转换后的目标进制数的字符串表示 + */ + public static String fromDecimal(int decimalValue, int base) { + if (decimalValue == 0) { + return "0"; // 如果十进制数为0,直接返回"0" + } + + StringBuilder result = new StringBuilder(); // 用于存储转换结果的StringBuilder对象 + char[] digits = "0123456789ABCDEF".toCharArray(); // 表示所有可能的进制字符的数组 + + // 使用循环进行进制转换 + while (decimalValue > 0) { + int remainder = decimalValue % base; // 取余数作为当前位的值 + result.insert(0, digits[remainder]); // 将当前位的值添加到结果的开头 + decimalValue /= base; // 十进制数除以目标进制,为下一次循环做准备 + } + + return result.toString(); // 返回转换后的结果字符串 + } + + // 主方法:执行进制转换 + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); // 创建Scanner对象用于读取用户输入 + + // 读取要转换的数、其原始进制和目标进制 + System.out.print("请输入要转换的数: "); + String number = scanner.nextLine(); + System.out.print("请输入该数的原始进制(2-16): "); + int inputBase = scanner.nextInt(); + + // 读取目标进制 + System.out.print("请输入目标进制(2-16): "); + int targetBase = scanner.nextInt(); + + // 验证输入的有效性 + if (inputBase < 2 || inputBase > 16 || targetBase < 2 || targetBase > 16) { + System.out.println("无效的进制。进制必须在2到16之间。"); + return; // 如果输入无效,则直接返回,不执行后续操作 + } + + try { + // 将输入的数转换为十进制数 + int decimalValue = toDecimal(number, inputBase); + + // 将十进制数转换为目标进制数 + String result = fromDecimal(decimalValue, targetBase); + + // 输出转换后的结果 + System.out.println(number + "初始是" + inputBase + "进制;" + "在" + targetBase + "进制下是"+ result); + } catch (IllegalArgumentException e) { + // 捕获并处理非法参数异常 + System.out.println("错误: " + e.getMessage()); + } + + scanner.close(); // 关闭Scanner对象,释放资源 + } +} diff --git a/test6298.iml b/test6298.iml new file mode 100644 index 0000000..8b2ade9 --- /dev/null +++ b/test6298.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file