算法基于原理: N = (N / d)×d + N % d
其中:
N——十进制数
d——目标数制的基数
以十进制数1348转换到八进制数举例,其运算过程如下:
(来源:数据结构 严蔚敏)
由于结果需要逆序输出,故采用栈结构来实现,具体代码如下:
-
package ds.linerlist;
-
import java.util.Stack;
-
enum SHIFT {
-
BINARY, OCTNORY, HEX
-
}
-
/**
-
* 用栈实现十进制到其他数制的转换
-
* @author <a href="mailto:bao.yiming@live.cn" mce_href="mailto:bao.yiming@live.cn">Bao Yiming</a>
-
*/
-
public class NumberSystemConversion {
-
/**
-
* 从十进制转换到其他进制。
-
* @param number 要转换的十进制数。
-
* @param shift 目标数制。
-
* @return
-
*/
-
public static String conversion(Integer number, SHIFT shift) {
-
StringBuilder res = new StringBuilder();
-
Stack stack = new Stack(); // 新建一个栈来存放十进制数每次除二时的余数。
-
while (number != 0) {
-
switch (shift) {
-
case BINARY:
-
stack.push((number % 2));
-
number /= 2;
-
break;
-
case OCTNORY:
-
stack.push((number % 8));
-
number /= 8;
-
break;
-
case HEX:
-
stack.push((number % 16));
-
number /= 16;
-
break;
-
}
-
}
-
// 弹出栈顶元素,即逆序输出余数
-
while (!stack.empty()) {
-
res.append(stack.pop());
-
}
-
return res.toString();
-
}
-
}
http://blog.csdn.net/baoyiming1991/article/details/6271487
阅读(1671) | 评论(0) | 转发(0) |