蓝桥杯2014年以前JAVA历年真题及答案整理——十六进制转八进制

问题描述

给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

输入的第一行为一个正整数n (1<=n<=10)。接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

输出n行,每行为输入对应的八进制正整数。

注意输入的十六进制数不会有前导0,比如012A。

输出的八进制数也不能有前导0。

样例输入

2
39
123ABC

样例输出

71
4435274

提示先将十六进制数转换成某进制数,再由某进制数转换成八进制。

import java.io.*;
public class Main{
public static void main (String args[]) throws NumberFormatException, IOException{
    BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
    int n=Integer.parseInt(buf.readLine());
    String str[]=new String[n];
    for(int i=0;i<n;i++){
         str[i]=buf.readLine();
    }
    for(int j=0;j<n;j++){
        transform(str[j]);
    }
    }
    public static void transform(String s){
    StringBuffer st=new StringBuffer();
        char c[]=s.toCharArray();
        for(int i=0;i<c.length;i++){
            switch(c[i]){
                case ‘0‘:{
                    st.append("0000");
                    break;
                }
                case ‘1‘:{
                    st.append("0001");
                    break;
                }
                case ‘2‘:{
                    st.append("0010");
                    break;
                }
                case ‘3‘:{
                    st.append("0011");
                    break;
                }
                case ‘4‘:{
                    st.append("0100");
                    break;
                }case ‘5‘:{
                    st.append("0101");
                    break;
                }case ‘6‘:{
                    st.append("0110");
                    break;
                }case ‘7‘:{
                    st.append("0111");
                    break;
                }case ‘8‘:{
                    st.append("1000");
                    break;
                }case ‘9‘:{
                    st.append("1001");
                    break;
                }case ‘A‘:{
                    st.append("1010");
                    break;
                }case ‘B‘:{
                    st.append("1011");
                    break;
                }case ‘C‘:{
                
                    st.append("1100");
                    break;
                }
                case ‘D‘:{
                    st.append("1101");
                    break;
                }
                case ‘E‘:{
                    st.append("1110");
                    break;
                }
                case ‘F‘:{
                    st.append("1111");
                    break;
                }
            }
        }
        transform_02(st);
}
   public static void transform_02(StringBuffer s){
    int i=s.length();
    if(i%3==0){
        if(s.substring(0,3).equals("000"))
                s.delete(0,3);
    }
    if(i%3==1){
        if(s.substring(0,1).equals("0"))
        		s.delete(0,1);
    			else
    }
        if(i%3==2){
          if(s.substring(0,2).equals("00"))
                s.delete(0,2);
        	else
            s.insert(0,"0");
    }
    
        int n=s.length()/3;
            String s1[]=new String[n];
        StringBuffer sbf=new StringBuffer();
    for(int j=0;j<n;j++){
     s1[j]=s.substring(j*3,j*3+3);
     if(s1[j].equals("000"))
        sbf.append("0");
        if(s1[j].equals("001"))
        sbf.append("1");
        if(s1[j].equals("010"))
        sbf.append("2");
        if(s1[j].equals("011"))
        sbf.append("3");
        if(s1[j].equals("100"))
        sbf.append("4");
        if(s1[j].equals("101"))
        sbf.append("5");
        if(s1[j].equals("110"))
        sbf.append("6");
        if(s1[j].equals("111"))
        sbf.append("7");
    }
    String s2=sbf.toString();
    System.out.println(s2);
   }
   
}


蓝桥杯2014年以前JAVA历年真题及答案整理——十六进制转八进制,布布扣,bubuko.com

蓝桥杯2014年以前JAVA历年真题及答案整理——十六进制转八进制

上一篇:蓝桥杯2014年以前JAVA历年真题及答案整理——查找整数


下一篇:蓝桥杯2014年以前JAVA历年真题及答案整理——闰年判断