算法基于原理: 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(); } }