十六進制轉換十進制(JAVA版)

解題思路路大概爲:現將十六進制數轉換爲二進制數,再講二進制數轉換爲八進制數。在進行十六進制轉換爲八進制時能夠利用JAVA中的‘&’運算符號,一個十六進制數能夠表示爲四個二進制數,利用‘&’能夠將一個十六進制數向右移位四次獲得四位二進制數。在進行二進制數轉換爲八進制時,一個八進制能夠表示爲三位二進制數,所以三位合一位便可。本題中要注意的一點是在轉換爲二進制數要保證位數爲3的倍數。java

import java.util.*;
public class Main {
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String a[]=new String[n];
        String b[]=new String[n];
        for(int i=0;i<n;i++)
        {
            a[i]=sc.next();
            b[i]="";
        }
        for(int i=0;i<n;i++)
        {
            b[i]=hexToOctal(a[i]);
            System.out.println(b[i]);
        }
    }
    static String hexToOctal(String str)
    {
        String s=to2(str);
        String s1=add0(s);
        return to8(s1);
    }
    static String to2(String str)
    {
        char chs[]= {'0','1'};
        String s=new String("0123456789ABCDEF");
        char c1[]=str.toCharArray();
        int pos=str.length()*4;
        char c2[]=new char[pos];
        for(int i=str.length()-1;i>=0;i--)
        {
            int temp=s.indexOf(c1[i]);
            for(int j=0;j<4;j++)
            {
                c2[--pos]=chs[temp&1];
                temp=temp>>>1;
            }
        }
        return new String(c2);
    }
    static String add0(String str)
    {
        String s=str.substring(str.indexOf('1'));
        int len=s.length();
        if(len%3==0)
            return s;
        else if(len%3==1)
            return "00"+s;
        else
            return "0"+s;
    }
    static String to8(String str)
    {
        HashMap<String,Character> map=new HashMap<String, Character>();
        map.put("000", '0');
        map.put("001", '1');
        map.put("010", '2');
        map.put("011", '3');
        map.put("100", '4');
        map.put("101", '5');
        map.put("110", '6');
        map.put("111", '7');
        int pos=str.length()/3;
        char c1[]=new char[pos];
        for(int i=str.length();i>0;i-=3)
        {
            String s=str.substring(i-3, i);
            c1[--pos]=map.get(s);
        }
        return new String(c1);
    }
    

}
相關文章
相關標籤/搜索