做国赛的题需要实现数字k进制之间的转换(2<=k<=36)上网搜了实现的方法:
博客的地址:就是这里!
public class BinaryTest {//设置字符数组//可以添加任意不重复字符,提高能转换的进制的上限static char chs[] = new char[36];static {for(int i = 0; i < 10 ; i++) {chs[i] = (char)('0' + i);}for(int i = 10; i < chs.length; i++) {chs[i] = (char)('A' + (i - 10));}}/*** 转换方法* @param num 元数据字符串* @param fromRadix 元数据的进制类型* @param toRadix 目标进制类型* @return*/static String transRadix(String num, int fromRadix, int toRadix) {int number = Integer.valueOf(num, fromRadix);StringBuilder sb = new StringBuilder();while (number != 0) {sb.append(chs[number%toRadix]);number = number / toRadix;}return sb.reverse().toString();}//测试public static void main(String[] args) {System.out.println(transRadix("YGL", 36, 35));}}
后来发现java中已经自带了任意进制转换的方法
当数字为十进制的时候认为是 int (或者long,BigInteger…)是个数字类型
当数字为其他进制的时候则被认为 是String 类型
1、由十进制转换为任意进制
结果:
使用Integer.toString方法,第一个参数是要转换的数字,第二个参数是要转换成为的进制
再例如: 由十进制转换为7进制
public class Jinzhi {public static void main(String[] args) {int a = 8;String s = Integer.toString(a, 7);System.out.println(s);
}
}
结果为
11
2、由其他进制转换为十进制
使用Integer.parseInt方法,第一个参数是要转换的字符串,第二个参数是a所属于的进制
(因为我们要转换为int,默认就是十进制了);
所以上述结果为:
再例如:
public class Jinzhi {public static void main(String[] args) {String a = "1001";int s = Integer.parseInt(a, 2);System.out.println(s);
}
}
结果:
9