查表法-将十进制转化为二进制,八进制,十六进制,以及反转数组

本文介绍了一个简单的C语言程序实例,演示了如何反转数组及使用查表法进行不同进制间的数字转换。通过具体代码示例,详细解释了数组反转的实现过程,并展示了如何利用查表法快速实现十进制数到二进制、八进制和十六进制的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天来说下反转数组与查表。

反转数组这个C语言里是个简单的例子,就不多说了:

package com.Tips;

public class OperateTest {

    public static void printArray(int[] a){
        System.out.print("[");
        for(int i=0;i<=a.length-1;i++){
            if(i<a.length-1){
                System.out.print(a[i]); 
            }
            else if(i==a.length-1){
                System.out.println(a[i]+"]");
            }   
        }
    }

    public static void reverseArray(int[] array){

//下面就是进行数值的转换

        for(int start = 0,end = array.length-1;start<end;start++,end--){

            array[start] = array[start]^array[end];
            array[end] = array[start]^array[end];
            array[start] = array[start]^array[end];
        }
    }
    public static void main(String[] args) {

        int[] a =new int[] {1,3,5,2,8,6,4,7,9};
        reverseArray(a);
        printArray(a);

    }

}

接下来说说查表法,简单来说

查表法就是利用容器将对应关系储存起来,以达到节省时间的目的的这样一种方法

下面以进制转化为例子来说明其应用:

package com.Tips;

public class OperateTest {

    public static void printArray(char[] a,int start){

        for(int i=start;i<=a.length-1;i++){
            if(i<=a.length-1){
                System.out.print(a[i]); 
            }
        }
    }

//转化为二进制
    public static void toBinary(int num){

        trans(num,1,1);
    }

//转化为十六进制
    public static void toHex(int num){

        trans(num,15,4);
    }

//转化为八进制
    public static void toOctal(int num){

        trans(num,7,3);
    }

    public static void trans(int num,int base,int offset){
        if(num == 0){
            System.out.println(0);
            return;
        }

//  这里是一个关系表    
        char[] cha = {'0','1','2','3','4',
                      '5','6','7','8',
                      '9','A','B','C',
                      'D','E','F'};

/*  查表涉及的数据比较多,
    我们先储存起来,
    后面进行操作,
    所以定义一个临时容器  
*/
        char[] tem = new char[32];  //定义容器
        int end = tem.length-1;


        int temp = num & base;  //按二进制的与操作,一位一位转化比如本例 10000 & 00001 = 0,故最后一位为0; 

            tem[end--] = cha[temp];  //查表操作,寻找对应关系
            num = num >>> offset;
        }

        printArray(tem,++end);  //打印输出如果不是从end++开始,则输出不是110而是       110,前面存在若干空值。

    }
    public static void main(String[] args) {

        toBinary(6);
        System.out.println();
        System.out.println(Integer.toBinaryString(6));  //利用自带方法对比是否正确;
    }

}
十进制数转换为二进制八进制十六进制的过程通常涉及从高位到低位逐步除以目标基数并记录余数的过程。这里我们仅提供一个基本的顺序栈(数组或链表)实现思路,因为栈主要用来存储中间结果和处理过程。 1. **二进制转换**: - 初始化一个空栈用于存储二进制位。 -十进制数不断除以2,得到商和余数。 - 将余数依次入栈,直到商为0为止,栈顶的数字就是最高位。 - 反转栈元素,得到的序列就是二进制表示。 2. **八进制转换**: - 类似于二进制,但基数变为8,其他步骤不变。 - 每次得到的余数应该在0-7之间,可以使用数组映射成对应的八进制字符('0'-'7')。 3. **十六进制转换**: - 同样先除以16,余数范围是0-15,可以存储为十六进制字符('0'-'9', 'A'-'F')。 - 另外,当整数较大时,可能会有超过两位的十六进制值,这时需要额外跟踪是否遇到新的循环节(例如前四位为0x10-0x1f对应A-F)。 以下是伪代码示例: ```python def decimal_to_base(num, base): stack = [] while num > 0: digit = num % base if base == 16 and digit >= 10: digit += 10 - (base * (digit // 10)) # 转换大写字母A-F stack.append(digit) num //= base return ''.join(map(str, reversed(stack))) # 示例: decimal_num = 1234 binary = decimal_to_base(decimal_num, 2) # 10000010100 octal = decimal_to_base(decimal_num, 8) # 1724 hexadecimal = decimal_to_base(decimal_num, 16) # 4d2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值