进制转换

问题:将m进制num转换为n进制 (2 <= m,n <= 62) ? 
总体思路是:先将m进制转换为10进制,再将10进制转为n进制。

1、m进制数num转为10进制 

从低位到高位按权展开即可。 
例如:8进制1356 转为10进制 
6*8^0 + 5 * 8^1 + 3 * 8^2 + 1 * 8^3 = 750

2、10进制转为n进制

采用除留取余,逆序排列。 
例如:10进制65036转为16进制 
65036 除 16,余数 12(C),商4064 
4064 除 16,余数 0(0),商254 
254 除 16,余数 14(E),商15 
15除16,余数 15(F),商0,结束 
得16进制为 FE0C

import java.util.Scanner;
import java.util.Stack;

public class ZhuanHuan {

    //这里只写出了最多16进制时用到的字符,如果更大的进制,可以再往后添加
    private static char[] array = "0123456789abcdef".toCharArray();
    private static String numStr = "0123456789abcdef";

    // 10进制转为其他进制,除留取余,逆序排列
    //number待转换的数,转为N进制
    public static String _10_to_N(long number, int N) {
        Long numb = number;
        Stack<Character> stack = new Stack<Character>();
        StringBuilder result = new StringBuilder(0);//结果用一个可变字符串表示
        while (numb != 0) {
            stack.add(array[new Long((numb % N)).intValue()]);
            numb = numb / N;
        }
        for (; !stack.isEmpty();) {
            result.append(stack.pop());
        }
        return result.length() == 0 ? "0" : result.toString();

    }

    // 其他进制转为10进制,按权展开,N进制转为10进制
    //传入的待转换数为字符串形式
    public static long N_to_10(String number, int N) {
        char ch[] = number.toCharArray();
        int len = ch.length;
        long result = 0;
        if (N == 10) {
            return Long.parseLong(number);
        }
        long base = 1;
        for (int i = len - 1; i >= 0; i--) {
            int index = numStr.indexOf(ch[i]);//把待转换的每一位的字符,找到在numStr中的坐标即为其对应的数值
            result += index * base;
            base *= N;
        }

        return result;
    }

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int src = in.nextInt();//原数据的进制
            int aim = in.nextInt();//转为多少进制
            String intStr = in.next();//待转换数据

            Long tmp = N_to_10(intStr, src);
            String tmp2 = _10_to_N(tmp, aim);

            String newStr = tmp2.replaceFirst("^0*", "");
            System.out.println(newStr);
        }
    }
}

 

 

https://blog.csdn.net/u012027907/article/details/77683813

posted @ 2018-07-17 21:11  xdyixia  阅读(501)  评论(0编辑  收藏  举报