java十六进制转八进制蓝桥杯试题

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         
                Scanner scanner = new Scanner(System.in);  
                int n = scanner.nextInt();  
                String[] sts = new String[n+1];  
                for(int i=0;i<n;i++){  
                    sts[i] = scanner.next();  
                }  
                scanner.close();  
                for(int i=0;i<n;i++){  
                    String strBinary = toBinary(sts[i]);  
                    int len_strBin = strBinary.length();  
                    if(len_strBin%3==1) strBinary = "00" + strBinary;  
                    if(len_strBin%3==2) strBinary = "0" + strBinary;  
                    String strOctal = toOctal(strBinary);  
                    System.out.println(strOctal);  
                }  
          
            }  
          
            private static String toOctal(String strBinary) {  
                int len = strBinary.length();  
                int k;  
                StringBuffer stb = new StringBuffer();  
                if(strBinary.substring(0, 3).equals("000")) k=3;  
                else k=0;  
                for(int i=k;i<len-2;i+=3){  
                    String string = strBinary.substring(i,i+3);  
                    if(string.equals("000")) stb.append("0");  
                    else if(string.equals("001")) stb.append("1");  
                    else if(string.equals("010")) stb.append("2");  
                    else if(string.equals("011")) stb.append("3");  
                    else if(string.equals("100")) stb.append("4");  
                    else if(string.equals("101")) stb.append("5");  
                    else if(string.equals("110")) stb.append("6");  
                    else if(string.equals("111")) stb.append("7");  
                    /*switch (Integer.valueOf(strBinary.substring(i, i+3))) {
                    case 000: stb.append("0"); break;
                    case 001: stb.append("1"); break;
                    case 010: stb.append("2"); break;
                    case 011: stb.append("3"); break;
                    case 100: stb.append("4"); break;
                    case 101: stb.append("5"); break;
                    case 110: stb.append("6"); break;
                    case 111: stb.append("7"); break;
         
                    default:
                        break;
                    }*/  
                }  
                  
                  
                return stb.toString();  
            }  
          
            private static String toBinary(String strHex) {  
                int len_str = strHex.length();  
                StringBuffer stb = new StringBuffer();  
                for(int i=0;i<len_str;i++){  
                    switch (strHex.charAt(i)) {  
                    case '0': stb.append("0000"); break;  
                    case '1': stb.append("0001"); break;  
                    case '2': stb.append("0010");break;  
                    case '3': stb.append("0011"); break;  
                    case '4': stb.append("0100"); break;  
                    case '5': stb.append("0101"); break;  
                    case '6': stb.append("0110"); break;  
                    case '7': stb.append("0111"); break;  
                    case '8': stb.append("1000"); break;  
                    case '9': stb.append("1001"); break;  
                    case 'A': stb.append("1010"); break;  
                    case 'B': stb.append("1011"); break;  
                    case 'C': stb.append("1100"); break;  
                    case 'D': stb.append("1101"); break;  
                    case 'E': stb.append("1110"); break;  
                    case 'F': stb.append("1111"); break;  
                    default: break;  
                    }  
                }  
                  
                return stb.toString();  
            }  
        }  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值