Java语言实现16进制数转换成2进制数,再由2进制数转换成8进制数(蓝桥杯训练)

import java.util.Scanner;
//16进制转换成2进制,再由2进制转换成8进制
public class Main {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        String[] arr16=new String[n+1];
        for(int i=0;i<=n;i++) {
            arr16[i]=in.nextLine();
        }
        for(int i=1;i<=n;i++) {
            String[] str2=Convert16To2(arr16[i]);
            for(int j=0;j<str2.length;j++) {
                System.out.print(str2[j]);
            }
            System.out.print(" ");
            
            char[] str8=Convert2To8(str2);
            boolean flag=false;
            for(int j=0;j<str8.length;j++) {
                if(str8[j]!='0')
                    flag=true;
                if(flag)
                    System.out.print(str8[j]);
            }
            System.out.println();
        }
    }

    private static char[] Convert2To8(String[] str2) {
        char[] c=new char[str2.length*4];
        int j=0;
        for(int i=0;i<str2.length;i++) {
            c[j]=str2[i].charAt(0);
            j++;
            c[j]=str2[i].charAt(1);
            j++;
            c[j]=str2[i].charAt(2);
            j++;
            c[j]=str2[i].charAt(3);
            j++;
        }
        String s;
        char[] str8;
        int k=0;
        if(c.length%3!=0) {
            str8=new char[c.length/3+1];
            if((3-(c.length%3))==1) {
                s="0"+c[0]+c[1];
                str8[k]+=isWho8(s);
                k++;
                for(int i=2;i<c.length-2;i=i+3) {
                    s=""+c[i]+c[i+1]+c[i+2];
                    str8[k]+=isWho8(s);
                    k++;
                }
            }else if(3-(c.length%3)==2) {
                s="00"+c[0];
                str8[k]+=isWho8(s);
                k++;
                for(int i=1;i<c.length-2;i=i+3) {
                    s=""+c[i]+c[i+1]+c[i+2];
                    str8[k]+=isWho8(s);
                    k++;
                }
            }
        }else {
            str8=new char[c.length/3];
            for(int i=0;i<c.length-2;i=i+3) {
                s=""+c[i]+c[i+1]+c[i+2];
                str8[k]+=isWho8(s);
                k++;
            }
        }
        return str8;
    }

    private static char isWho8(String s) {
        char c='0';
        String[] str= {"000","001","010","011","100","101","110","111"};
        for(int i=0;i<str.length;i++) {
            if(s.equals(str[i])) {
                c=(char) (i+'0');
            }
        }
        return c;
    }

    private static String[] Convert16To2(String str16) {
        String[] str= {"0000","0001","0010","0011","0100","0101","0110","0111",
                "1000","1001","1010","1011","1100","1101","1110","1111"};
        String[] str2=new String[str16.length()];
        int j=0;
        for(int i=0;i<str16.length();i++) {
            char c=str16.charAt(i);
            int x;
            if(c<'0'||c>'9') {
                x=c-'A'+10;
            }else {
                x=c-'0';
            }
            str2[j]=str[x];
            j++;
        }
        return str2;
    }

}

猜你喜欢

转载自blog.csdn.net/zxt1484675627/article/details/88130422