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

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

反转数组这个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));  //利用自带方法对比是否正确;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值