- Java code
public static String toString(int i, int radix) { if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) radix = 10; /* Use the faster version */ if (radix == 10) { return toString(i); } char buf[] = new char[33]; boolean negative = (i < 0); int charPos = 32; if (!negative) { i = -i; } while (i <= -radix) { buf[charPos--] = digits[-(i % radix)]; i = i / radix; } buf[charPos] = digits[-i]; if (negative) { buf[--charPos] = '-'; } return new String(buf, charPos, (33 - charPos)); }
其中,为什么要将 i转化成负数处理?
------解决方案--------------------------------------------------------
这个程序是不是进制转换工具,
如果是的话,你可以使正数和负数分开处理。
原程序作者是把整数统一转为负数数再进行处理
你也可以统一转为正数再进行处理,比如:
- Java code
public class TestConvertion { public static void main(String[] args) { System.out.println("\n---正数------"); for (int i = 2; i <= 36; i++) {// 测试100的 2进制 3进制 .....36进制 System.out.printf(" %2d进制:%7s", i,convert(100, i)); if (i % 6 == 1) System.out.println(); } System.out.println("\n---负数------"); for (int i = 2; i <= 36; i++) {// 测试-100的 2进制 3进制 .....36进制 System.out.printf(" %2d进制:%7s", i,convert(-100, i)); if (i % 6 == 1) System.out.println(); } } /** * @param decimal:要转换的数 * @param radix:找转换的进制 * @return:转换成功后的数据 */ static String convert(int decimal, int radix) { if (radix < 2 || radix > 36) throw new UnsupportedOperationException("输入错误"); // 十进制的数 允许转化成2进制 3进制 .....36进制, // 并且以字符串形式返回 char[] a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); int dividend = decimal < 0 ? -decimal : decimal;// 被除数,有可能是负数 int divider = radix; // 除数 int quotient = 0;// 商 int remainder = 0; String result = ""; while ((quotient = dividend / divider) != 0) { remainder = dividend % divider; result = a[remainder] + result; dividend = quotient;// 重新初始化,更新被除数 } remainder = dividend % divider; result = a[remainder] + result; if (decimal < 0) return '-' + result;// 如果是负数 return result; }}/*---正数------ 2进制:1100100 3进制: 10201 4进制: 1210 5进制: 400 6进制: 244 7进制: 202 8进制: 144 9进制: 121 10进制: 100 11进制: 91 12进制: 84 13进制: 79 14进制: 72 15进制: 6A 16进制: 64 17进制: 5F 18进制: 5A 19进制: 55 20进制: 50 21进制: 4G 22进制: 4C 23进制: 48 24进制: 44 25进制: 40 26进制: 3M 27进制: 3J 28进制: 3G 29进制: 3D 30进制: 3A 31进制: 37 32进制: 34 33进制: 31 34进制: 2W 35进制: 2U 36进制: 2S---负数------ 2进制:-1100100 3进制: -10201 4进制: -1210 5进制: -400 6进制: -244 7进制: -202 8进制: -144 9进制: -121 10进制: -100 11进制: -91 12进制: -84 13进制: -79 14进制: -72 15进制: -6A 16进制: -64 17进制: -5F 18进制: -5A 19进制: -55 20进制: -50 21进制: -4G 22进制: -4C 23进制: -48 24进制: -44 25进制: -40 26进制: -3M 27进制: -3J 28进制: -3G 29进制: -3D 30进制: -3A 31进制: -37 32进制: -34 33进制: -31 34进制: -2W 35进制: -2U 36进制: -2S */