把十进制的数字转为任何进制

来源:互联网 发布:手机荧光字软件 编辑:程序博客网 时间:2024/05/18 04:01

今天想到了一个问题,如何把10进制的数转为 1~9 进制的任何进制的数,查看了网友的答案,都是那么高大上,于是我就想设计一个大家都能看的懂的方法。在跑步的时候想到了如何把十进制转为2进制。

根据这个原理:辗转相处法,编写的如下代码。

package me.jea.sort;import java.util.ArrayList;public class DecimalTransform {public static int transform(int number, int decimal) {try {check(number);} catch (RuntimeException e) {return -1;}int result = reverse(number, decimal);return result;}/** * @author jea * @param number *            要被转换的十进制数字 * @param decimal *            要被转换的进制 * @return */private static int reverse(int number, int decimal) {int beiChuShu = number;// 被辗转相除的 被除数int yuShu = -1;// 余数// 创建一个ArrayList,用来记录辗转相除的取余的结果ArrayList<Integer> list = new ArrayList<Integer>();// 辗转相除,直到被除数为0while (beiChuShu != 0) {yuShu = beiChuShu % decimal;//先要记录余数beiChuShu = beiChuShu / decimal;//如果先执行这步,会把被除数修改掉,因此与上面的语句不应该颠倒list.add(yuShu);// 自动装箱}// 把辗转相除的结果反过来连接起来StringBuilder sb = new StringBuilder();for (int i = list.size() - 1; i >= 0; i--) {sb.append(list.get(i));}// 再将sb中的结果转为数字返回int result = Integer.parseInt(sb.toString());return result;}/** * @author jea * @param number *            被检查的数字 *  */private static void check(int number) {if (number < 0) {throw new RuntimeException("请输入合法的数字");}}public static void main(String[] args) {int result = transform(16,5);//把十进制的16转为5进制System.out.println(result);//运行结果:31}}


原创粉丝点击