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。

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


代码示例:

package march0317_0331;

import java.util.Scanner;

public class March0318 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个十进制正整数(0 < n < 1000):");
        int num = scanner.nextInt();

        // 验证输入是否在指定范围内
        if (num >= 0 && num < 1000) {
            System.out.println("转换成八进制为:" + method(num));
        } else {
            System.out.println("错误!输入值超出范围,请确保0 < n < 1000。");
        }
    }

    // 转换函数,仅使用模除取余法实现
    public static String method(int n) {
        // StringBuilder对象
        StringBuilder octalStr = new StringBuilder();

        while (n > 0) {
            // 将余数插入到字符串的开头
            octalStr.insert(0, n % 8);
            // 除以8,得到新的余数
            n /= 8;
        }

        // 返回结果
        return octalStr.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/Sakurapaid/article/details/136823322