Chinaunix首页 | 论坛 | 博客
  • 博客访问: 149787
  • 博文数量: 108
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-15 20:24
个人简介

反反复复

文章分类

全部博文(108)

文章存档

2014年(72)

2013年(36)

我的朋友

分类: C/C++

2013-04-26 21:25:45

算法基于原理:      N = (N / d)×d + N % d

其中:

N——十进制数

d——目标数制的基数

 

以十进制数1348转换到八进制数举例,其运算过程如下:

(来源:数据结构 严蔚敏)

 

由于结果需要逆序输出,故采用栈结构来实现,具体代码如下:


点击(此处)折叠或打开

  1. package ds.linerlist;
  2. import java.util.Stack;
  3. enum SHIFT {
  4.     BINARY, OCTNORY, HEX
  5. }
  6. /**
  7.  * 用栈实现十进制到其他数制的转换
  8.  * @author <a href="mailto:bao.yiming@live.cn" mce_href="mailto:bao.yiming@live.cn">Bao Yiming</a>
  9.  */
  10. public class NumberSystemConversion {
  11.     /**
  12.      * 从十进制转换到其他进制。
  13.      * @param number 要转换的十进制数。
  14.      * @param shift 目标数制。
  15.      * @return
  16.      */
  17.     public static String conversion(Integer number, SHIFT shift) {
  18.         StringBuilder res = new StringBuilder();
  19.         Stack stack = new Stack(); // 新建一个栈来存放十进制数每次除二时的余数。
  20.         while (number != 0) {
  21.             switch (shift) {
  22.                 case BINARY:
  23.                     stack.push((number % 2));
  24.                     number /= 2;
  25.                     break;
  26.                 case OCTNORY:
  27.                     stack.push((number % 8));
  28.                     number /= 8;
  29.                     break;
  30.                 case HEX:
  31.                     stack.push((number % 16));
  32.                     number /= 16;
  33.                     break;
  34.             }
  35.         }
  36.         // 弹出栈顶元素,即逆序输出余数
  37.         while (!stack.empty()) {
  38.             res.append(stack.pop());
  39.         }
  40.         return res.toString();
  41.     }
  42. }
http://blog.csdn.net/baoyiming1991/article/details/6271487
阅读(1671) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~