首页 > 学院 > 开发设计 > 正文

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

2019-11-06 06:24:59
字体:
来源:转载
供稿:网友

在上一篇博文中我们实现了后进先出的数据结构——栈(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源码及进制转换源码,欢迎下载测试。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表