package com.raylew.algorithm.other;
import java.util.Scanner;
import java.util.Stack;
/**
* 进制转换
*
* @author Administrator
*/
public class 进制转换 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
String str1 = radixString(Integer.parseInt(str), 2);//十进制转化为2进制
System.out.println(str1);
String str2 = radixNum(str, 2, 10);//2进制转化为10进制
System.out.println(str2);
}
/**
* 将十进制数转为任意进制
*
* @param num 带转化的数
* @param radix 目标进制
* @return
*/
public static String radixString(int num, int radix) {
if (radix > 16) {
throw new RuntimeException("进制数超出范围,radix<=16");
}
StringBuffer str = new StringBuffer("");
String digths = "0123456789ABCDEF";
Stack<Character> s = new Stack<Character>();
while (num != 0) {
s.push(digths.charAt(num % radix));
num /= radix;
}
while (!s.isEmpty()) {
str.append(s.pop());
}
return str.toString();
}
/**
* 16进制内任意进制转换
*
* @param num 带转化的数
* @param srcRadix 原进制
* @param destRadix 目标进制
* @return
*/
public static String radixNum(String num, int srcRadix, int destRadix) {
if (srcRadix == destRadix) {
return num;
}
String digths = "0123456789ABCDEF";
char[] chars = num.toCharArray();
int len = chars.length;
if (destRadix != 10) {//目标进制不是十进制 先转化为十进制
num = radixNum(num, srcRadix, 10);
} else {
int n = 0;
for (int i = len - 1; i >= 0; i--) {
n += digths.indexOf(chars[i]) * Math.pow(srcRadix, len - i - 1);
}
return n + "";
}
return radixString(Integer.valueOf(num), destRadix);
}
}