- 任意进制转换为十进制,都是乘以基数的多少次方,然后相加;
- 十进制转换为任意进制,都是除以基数,然后倒着取余数;
- 用十进制数作中转,可实现任意进制数的转换
10——>radix进制
一、除k取余
21(10)——>?(2)
求解过程:
21%2=1,21/2=10,
10%2=0,10/2=5,
5%2=1, 5/2=2,
2%2=0, 2/2=1,
1%2=1,1/2=0,
结束 结果10101
public class 除k取余转换进制 {
public static void main(String[] args) {
// toBinary(21);
toRadix(10000, 16);
}
// 转为二进制
public static void toBinary(int x) {
Stack<Integer> stack = new Stack<>();
while (x != 0) {
int temp = x % 2;
stack.add(temp);
x /= 2;
}
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
}
// 以此类推,转换为r进制(注意16进制)
public static void toRadix(int x, int radix) {
Stack<Integer> stack = new Stack<>();
while (x != 0) {
int temp = x % radix;
stack.add(temp);
x /= radix;
}
while (!stack.isEmpty()) {
switch (stack.peek()) {
case 10:
System.out.print("A");
break;
case 11:
System.out.print("B");
break;
case 12:
System.out.print("C");
break;
case 13:
System.out.print("D");
break;
case 14:
System.out.print("E");
break;
case 15:
System.out.print("F");
break;
default:
System.out.print(stack.pop());
break;
}
}
}
}
二、Java自带的方法
10——>2 | Integer.toBinaryString(n) |
---|---|
10——>8 | Integer.toOctalString(n) |
10——>16 | Integer.toHexString(n) |
10——>r | Integer.toString(10,r) |
radix——>10
Java自带的方法
Integer.parseInt(String s, int radix);
程序代码
这里change()的String类型可以改成int的,看题目要求而定
public class radix转为10进制 {
public static void main(String[] args) {
change(16, "131");
}
public static void change(int r, String s) {
int index = 0;
int res = 0;
char[] cs = s.toCharArray();
while (cs.length != index) {
res *= r;
if (cs[index] >= 'A' && cs[index] <= 'Z') {
res += cs[index] - 'A' + 10;
} else {
res += cs[index] - '0';
}
index++;
}
System.out.println(res);
}
}
end.