- 实验内容
使用一个栈,将十进制装换为二进制或八、十六进制;
十进制转换为二进制:
十进制转化为二进制:
- 原理:
- 二进制是一种基数为2的数制,它只包含两个数字:0和1。
- 十进制数转换为二进制数是通过连续除以2并取余数的过程来完成的。
- 每次除法的余数(0或1)是从低位到高位生成的二进制位。
- 由于我们需要从低位到高位收集这些二进制位,因此使用栈是非常合适的,因为栈可以让我们以相反的顺序(后进先出)存储和取出这些位。
- 步骤:
- 初始化一个空栈。
- 将要转换的十进制数除以2,并将余数(0或1)压入栈中。
- 使用上一步得到的商重复上述的除法操作,直到商为0。
- 当商为0时,停止循环。
- 从栈中弹出所有元素,按照弹出的顺序(即二进制位从低位到高位的顺序)拼接起来,就得到了最终的二进制数。
用栈可以很自然地按照相反的顺序存储和取出元素,这符合二进制数从低位到高位生成的顺序。不需要额外的数组来反转结果。
import java.util.Stack;
public class Binary {
public static String Binary(int decimalNum) {
Stack<Integer> stack = new Stack<>();
while (decimalNum > 0) {
int remainder = decimalNum % 2;
stack.push(remainder);
decimalNum /= 2;
}
StringBuilder binaryNum = new StringBuilder();
while (!stack.isEmpty()) {
binaryNum.append(stack.pop());
}
return binaryNum.toString();
}
测试代码:
public class BinaryTest extends Binary{
public static void main(String[] args) {
int decimalNum = 10;
String binaryNum = Binary(decimalNum);
System.out.println("十进制" + decimalNum + "转化为二进制:" + binaryNum);
}
}
十进制转换为二进制运行结果:
十进制转换为八进制:
import java.util.Stack;
public class Octonary {
public static String Octonary(int decimalNum) {
Stack<Integer> stack = new Stack<>();
while (decimalNum > 0) {
int remainder = decimalNum % 8;
stack.push(remainder);
decimalNum /= 8;
}
StringBuilder octonaryNum = new StringBuilder();
while (!stack.isEmpty()) {
octonaryNum.append(stack.pop());
}
return octonaryNum.toString();
}
}
测试代码:
public class OctonaryTest extends Octonary{
public static void main(String[] args) {
int decimalNum = 25;
String octonaryNum = Octonary(decimalNum);
System.out.println("十进制" + decimalNum + "转化为八进制:" + octonaryNum);
}
}
十进制转换为八进制运行结果:
十进制转换为十六进制:
import java.util.Stack;
public class Sexadecimal {
public static String Sexadecimal(int decimalNum) {
Stack<Integer> stack = new Stack<>();
while (decimalNum > 0) {
int remainder = decimalNum % 16;
stack.push(remainder);
decimalNum /= 16;
}
StringBuilder sexadecimalNum = new StringBuilder();
while (!stack.isEmpty()) {
sexadecimalNum.append(stack.pop());
}
return sexadecimalNum.toString();
}
}
测试代码:
public class SexadecimalTest extends Sexadecimal{
public static void main(String[] args) {
int decimalNum = 116;
String sexadecimalNum = Sexadecimal(decimalNum);
System.out.println("十进制" + decimalNum + "转化为十六进制:" + sexadecimalNum);
}
}
十进制转换为十六进制运行结果: