public class DecimalToOtherBase { public static String decimalToHex(int n){ StringBuilder sb = new StringBuilder(); while(n > 0){ int resi = n % 16; if(resi >= 10) sb.insert(0, (char)('A' + resi - 10)); else sb.insert(0, resi); n /= 16; } return sb.length() == 0 ? "0" : sb.toString(); } public static int HexToDecimal(String s){ if(s == null) throw new IllegalArgumentException("Null string"); int num = 0; int pow = 1; for(int i = s.length() - 1; i >= 0; i--){ char c = s.charAt(i); num += (Character.isLetter(c) ? (c - 'A' + 10) : (c - '0')) * pow; pow *= 16; } return num; } public static String DecToAnyBase(int n, int base){ if(n < 10) return DecToAnyBaseSmaller(n, base); else if(n > 10) return DecToAnyBaseGreater(n, base); return String.valueOf(n); } /** * base 2 - 9 * @param n * @param base * @return */ private static String DecToAnyBaseSmaller(int n, int base){ StringBuilder sb = new StringBuilder(); while(n > 0){ int resi = n % base; sb.insert(0, resi); n /= base; } return sb.length() == 0 ? "0" : sb.toString(); } /** * base must be less than 36 * @param n * @param base * @return */ private static String DecToAnyBaseGreater(int n, int base){ StringBuilder sb = new StringBuilder(); while(n > 0){ int resi = n % base; if(resi >= 10) sb.insert(0, (char)('A' + resi - 10)); else sb.insert(0, resi); n /= base; } return sb.length() == 0 ? "0" : sb.toString(); } public static void main(String[] args) { System.out.println(decimalToHex(127)); System.out.println(DecToAnyBase(25, 16)); System.out.println(HexToDecimal("7F")); } }
Moreover, LeetCode has two problems basically ask you to convert decimal to 26 base and vice versa. See this and this blog.
No comments:
Post a Comment