当前位置:   article > 正文

Java代码基础算法练习-数制转换-2024.03.18

Java代码基础算法练习-数制转换-2024.03.18

任务描述:
输入一个 10 进制正整数n(取值范围:0<n<1000),然后输出它所对应的八进制(要求用模除取余,不得直接转换输出)


任务要求:


十进制数转八进制数的思想:

十进制数转八进制数的思想主要基于“除基取余”法,也称为“倒序取余”法。具体步骤如下:

  1. 整数部分转换
    • 用待转换的十进制数连续除以基数8,每次都取余数。
    • 第一次除得的余数,是转换后的八进制数的最低有效位(个位)。
    • 继续除以8,第二次的余数是次低位,依此类推,直至商为0为止。
    • 将所有余数从最后一次到第一次(也就是从低位到高位)排列起来,就得到了转换后的八进制数。
  1. 小数部分转换(如果存在):
    • 对于小数部分,转换方法类似于二进制转十进制中的乘基取整法。
    • 小数部分连续乘以8,每次取乘积的整数部分,直到乘积的小数部分消失或达到预设精度为止。
    • 所得到的整数序列从左到右排列即为小数点后的八进制数位。

举例来说,将十进制数136转换为八进制数的过程如下:

  • 136 ÷ 8 = 17 ... 0 (余数0)
  • 17 ÷ 8 = 2 ... 1 (余数1)
  • 2 ÷ 8 = 0 ... 2 (余数2)

于是,从后往前读取余数,得到的八进制数是210。

整个过程可以用迭代或递归的方式来编程实现,也可以利用栈数据结构的特点,模拟“倒序取余”的过程。在实际编程中,特别是使用栈思想时,会将每次的余数压入栈内,最后弹出栈内元素即可得到从高位到低位的八进制数位。


代码示例:

  1. package march0317_0331;
  2. import java.util.Scanner;
  3. public class March0318 {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. System.out.println("请输入一个十进制正整数(0 < n < 1000):");
  7. int num = scanner.nextInt();
  8. // 验证输入是否在指定范围内
  9. if (num >= 0 && num < 1000) {
  10. System.out.println("转换成八进制为:" + method(num));
  11. } else {
  12. System.out.println("错误!输入值超出范围,请确保0 < n < 1000。");
  13. }
  14. }
  15. // 转换函数,仅使用模除取余法实现
  16. public static String method(int n) {
  17. // StringBuilder对象
  18. StringBuilder octalStr = new StringBuilder();
  19. while (n > 0) {
  20. // 将余数插入到字符串的开头
  21. octalStr.insert(0, n % 8);
  22. // 除以8,得到新的余数
  23. n /= 8;
  24. }
  25. // 返回结果
  26. return octalStr.toString();
  27. }
  28. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/267110
推荐阅读
相关标签
  

闽ICP备14008679号