1. 程式人生 > >Java實現任意進位制轉換

Java實現任意進位制轉換

問題:將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 Hawei23 {

    private static char[] array = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
            .toCharArray();
    private static String numStr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
; //10進位制轉為其他進位制,除留取餘,逆序排列 public static String _10_to_N(long number, int N) { Long rest = number; Stack<Character> stack = new Stack<Character>(); StringBuilder result = new StringBuilder(0); while (rest != 0) { stack.add(array[new Long((rest % N)).intValue()]); rest = rest / N; } for
(; !stack.isEmpty();) { result.append(stack.pop()); } return result.length() == 0 ? "0":result.toString(); } // 其他進位制轉為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]); result += index * base; base *= N; } return result; } public static void main(String[] args) { // TODO Auto-generated method stub 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); } } }