如题怎么实现

解决方案 »

  1.   

    这是完整的进制转换的代码:
    java实现的:import java.util.Stack;public class Base
    {
        /**
         * 将数转为任意进制
         * 
         * @param num 10进制数
         * @param base 目标进制
         * @return
         */
        public static String baseString(int num, int base)
        {
         System.out.println("+++++++"+num);
            if (base > 16)
            {
                throw new RuntimeException("进制数超出范围,base<=16");
            }
            StringBuffer str = new StringBuffer("");
            String digths = "0123456789ABCDEF";
            Stack<Character> s = new Stack<Character>();
            System.out.println(num != 0);
            while (num != 0)
            {
             //charAt返回指定索引处的 char 值
                s.push(digths.charAt(num % base));
                
                /**
                 * 近来的num永远是十进制数因为不是十进制也在方法
                 * baseNum(String num, int srcBase, int destBase)
                 * 转成了十进制了
                 * 此算法的精髓在于就像我们把十进制的数转换成如二进制:
                 * 十进制数num=16转成二进制就是16%2求余数把16/2的数再保存到num中。循环直到num=0就可以求出
                 * 二进制后的数
                 */
                num /= base;
             
            }
            while (!s.isEmpty())
            {
                str.append(s.pop());
            }
            return str.toString();
        }    /**
         * 16进制内任意进制转换
         * 
         * @param num 任意数字
         * @param srcBase 原进制
         * @param destBase 目标进制
         * @return
         */
        public static String baseNum(String num, int srcBase, int destBase)
        {
            if (srcBase == destBase)
            {
                return num;
            }
            String digths = "0123456789ABCDEF";
            char[] chars = num.toCharArray();
            int len = chars.length;
            if (destBase != 10)
            {
             //@@@
             // 目标进制不是十进制 先转化为十进制
             //此目的在于如要把二进制转成十六进制。则先把二进制转成十进制在调用
             //baseString(Integer.valueOf(num), destBase)转成十六进制  递归
                num = baseNum(num, srcBase, 10);
                
                System.out.println(num);
            }
            else
            {
             /**
              * 如果目标进制是十进制则直接把源进制转换成十进制不需要@@@的步骤
              */
                int n = 0;
                for (int i = len - 1; i >= 0; i--)
                {
                 //pow()返回第一个参数的第二个参数次幂的值
                    n += digths.indexOf(chars[i]) * Math.pow(srcBase, len - i - 1); // (8,0)
                                                                                    // (8,1)
                }
                return n + "";
            }
            /**
             * valueOf
             * 返回保持指定的 String 的值的 Integer 对象。
             * 将该参数解释为表示一个有符号的十进制整数, 
             * 就好像将该参数赋予 parseInt(java.lang.String) 方法一样。
             * 结果是一个表示字符串指定的整数值的 Integer 对象。 
             */
            return baseString(Integer.valueOf(num), destBase);
        }    public static void main(String[] args)
        {
          String s = baseNum("11111", 2,16); // 128+64+8
            //s的十进制为5
           System.out.println(s);
            
     
        }
    }