蓝桥杯——基础练习 十六进制转八进制

题目

问题描述

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

输入格式

输入的第一行为一个正整数n (1<=n<=10)。

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

输出格式

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

注意

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

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


样例

样例输入

2
39
123ABC

样例输出

71
4435274

提示

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

解答

JAVA

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{
                s.insert(0,"00");
            }
        }
        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);
    }
}
posted @ 2014-03-13 23:13:00 kuye 阅读(6266) 评论(0)
发表评论
昵称
邮箱
网址