数据结构(十进制转换)

  • 实验内容

使用一个栈,将十进制装换为二进制或八、十六进制;

十进制转换为二进制:

十进制转化为二进制:

  1. 原理
    • 二进制是一种基数为2的数制,它只包含两个数字:0和1。
    • 十进制数转换为二进制数是通过连续除以2并取余数的过程来完成的。
    • 每次除法的余数(0或1)是从低位到高位生成的二进制位。
    • 由于我们需要从低位到高位收集这些二进制位,因此使用栈是非常合适的,因为栈可以让我们以相反的顺序(后进先出)存储和取出这些位。
  2. 步骤
    • 初始化一个空栈。
    • 将要转换的十进制数除以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);  
	    }  
	}

十进制转换为十六进制运行结果:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值