任意进制之间的转换(Java使用自带方法)

做国赛的题需要实现数字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、由十进制转换为任意进制

任意进制之间的转换(Java使用自带方法)_第1张图片
结果:
任意进制之间的转换(Java使用自带方法)_第2张图片

使用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、由其他进制转换为十进制

任意进制之间的转换(Java使用自带方法)_第3张图片
使用Integer.parseInt方法,第一个参数是要转换的字符串,第二个参数是a所属于的进制
(因为我们要转换为int,默认就是十进制了);
所以上述结果为:
任意进制之间的转换(Java使用自带方法)_第4张图片

再例如:


public class Jinzhi {
	public static void main(String[] args) {
		String a = "1001";
		int s = Integer.parseInt(a, 2);
		System.out.println(s);
}
}

结果:

9

这样通过十进制作为中介,就可以实现任意进制之间的转换了~

你可能感兴趣的:(任意进制之间的转换(Java使用自带方法))