栈的应用实例之——进制转换

来源:互联网 发布:阿里域名备案 编辑:程序博客网 时间:2024/05/16 10:49

在上一篇博文中我们实现了后进先出的数据结构——栈(Stack)。它后进先出的特性,使他成为程序设计中的有用工具。

在这篇博文中,我们将利用上一篇博文中实现的MyArrayStack去完成一个进制转换的任务。

任务目标:

给予一个非负十进制数N,要求转换成的2进制数。

算法原理:

假设二进制数N需要转换为d进制数,其算术原理为:

N = (N / d) * d + N%d

我们要将非负10进制数转换为2进制数,就是将该数用短除法除以2,取得每一位的余数,将余数按顺序压入栈中则输出的数就是需要转换的数。

如: 10进制数19需要转换成为2进制数

N N/2 N%2 19 9 1 9 4 1 4 2 0 2 1 0 1 0 1

所以二进制数就是将余数从高位到低位输出,即10011

10011 = 1* 2^4+0+0+1 *2^1 +1 = 16 +2 +1 = 19

因此算法十分简单,只需要将低位到高位的余数压入栈中,再从栈顶依次弹出数字即是需要转换的进制数了。

代码实现如下:

    public class DecToBinaryTest {    //建立类变量stack用来存储余数    static MyArrayStack<Integer> stack;    public static void main(String[] args) {        // TODO Auto-generated method stub         stack = new MyArrayStack<Integer>();        System.out.println(getBinaryForm(19));    }    private static String getBinaryForm(int decNum){        //如果输入的10进制数为负数则抛出异常        if(decNum<0)            throw new IllegalArgumentException();        StringBuffer sb = new StringBuffer();        while(decNum !=0){            //当decNum不为0时,迭代地除2的余数压入栈中            Integer r = decNum % 2;            decNum = decNum /2;            stack.push(r);        }        //将栈中的元素弹出并放入到字符串中输出        while(!stack.isEmpty())            sb.append(stack.pop());        return sb.toString();    }}

本博文源码下载地址,内含MyArrayStack源码及进制转换源码,欢迎下载测试。

0 0