蓝桥官网练习系统-BASIC-012 -十六进制转八进制

点击查看:蓝桥官网练习系统题解目录

题目012- 十六进制转八进制

在这里插入图片描述

题解代码

import java.io.*;
public class Main{
  public static void main(String[] args) throws IOException{
    BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
    int n=Integer.parseInt(input.readLine());
    for(int ii=0;ii<n;++ii){
       char[] s1=input.readLine().toCharArray();//s1读取16进制字符串 
       StringBuilder s2=new StringBuilder();//s2存储转换后的2进制字符串
       for(int i=0;i<s1.length;++i)//转换成2进制字符串
          switch(s1[i]){
             case '0':s2.append("0000");break;
             case '1':s2.append("0001");break;
             case '2':s2.append("0010");break;
             case '3':s2.append("0011");break;
             case '4':s2.append("0100");break;
             case '5':s2.append("0101");break;
             case '6':s2.append("0110");break;
             case '7':s2.append("0111");break;
             case '8':s2.append("1000");break;
             case '9':s2.append("1001");break;
             case 'A':s2.append("1010");break;
             case 'B':s2.append("1011");break;
             case 'C':s2.append("1100");break;
             case 'D':s2.append("1101");break;
             case 'E':s2.append("1110");break;
             case 'F':s2.append("1111");break;
             }
        while(s2.length()%3!=0)//如果s2的长度不是3的倍数,在s2字符串前补足够的0
            s2.insert(0, "0");
            s1=s2.toString().toCharArray();
            int i=0;
        while(i<s1.length&&(s1[i]-'0')*4+(s1[i+1]-'0')*2+(s1[i+2]-'0')==0) i+=3;//前导0不输出
        if(i==s1.length) System.out.println("0");//如果i已经走到2进制字符串末尾,说明字符串表示的数字是0,输出0
        else
	    for(;i<s1.length;i+=3)//3位一输出
	         System.out.print((s1[i]-'0')*4+(s1[i+1]-'0')*2+(s1[i+2]-'0'));
	System.out.println();
     }
  }
}

发布了52 篇原创文章 · 获赞 7 · 访问量 1808

猜你喜欢

转载自blog.csdn.net/weixin_44107920/article/details/103974835