zoukankan      html  css  js  c++  java
  • 基础练习 十六进制转八进制

    /*
    基础练习 十六进制转八进制  
    
    问题描述
      给定n个十六进制正整数,输出它们对应的八进制数。
    
    输入格式
      输入的第一行为一个正整数n (1<=n<=10)。
      接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
    
    输出格式
      输出n行,每行为输入对应的八进制正整数。
    
      【注意】
      输入的十六进制数不会有前导0,比如012A。
      输出的八进制数也不能有前导0。
    
    样例输入
      2
      39
      123ABC
    
    样例输出
      71
      4435274
    
      【提示】
      先将十六进制数转换成某进制数,再由某进制数转换成八进制。
    */
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int n = input.nextInt();
            String a[] = new String[n];
            for (int i = 0; i < n; i++) {
                a[i] = input.next();
            }
            input.close();
            for (int i = 0; i < a.length; i++) {
                String s = a[i];
                String ss = toHex(s);
                if (ss.length() % 3 == 1) {
                    ss = "00" + ss;
                }
                if (ss.length() % 3 == 2) {
                    ss = "0" + ss;
                }
                System.out.println(toOct(ss));
            }
        }
    
        public static String toHex(String str) {
            StringBuffer hexstr = new StringBuffer();
            for (int i = 0; i < str.length(); i++) {
                char indexchar = str.charAt(i);
                switch (indexchar) {
                case '0':
                    hexstr.append("0000");
                    break;
                case '1':
                    hexstr.append("0001");
                    break;
                case '2':
                    hexstr.append("0010");
                    break;
                case '3':
                    hexstr.append("0011");
                    break;
                case '4':
                    hexstr.append("0100");
                    break;
                case '5':
                    hexstr.append("0101");
                    break;
                case '6':
                    hexstr.append("0110");
                    break;
                case '7':
                    hexstr.append("0111");
                    break;
                case '8':
                    hexstr.append("1000");
                    break;
                case '9':
                    hexstr.append("1001");
                    break;
                case 'A':
                    hexstr.append("1010");
                    break;
                case 'B':
                    hexstr.append("1011");
                    break;
                case 'C':
                    hexstr.append("1100");
                    break;
                case 'D':
                    hexstr.append("1101");
                    break;
                case 'E':
                    hexstr.append("1110");
                    break;
                case 'F':
                    hexstr.append("1111");
                    break;
                default:
                    break;
                }
            }
            return hexstr.toString();
        }
    
        public static String toOct(String str) {
            StringBuffer octstr = new StringBuffer();
            int len = str.length();
            int m = len % 3;
            int k = 0;
            if (str.substring(0, 3).equals("000")) {
                k = 3;
            }
            for (int i = k; i < str.length() - 2; i += 3) {
    
                String s = str.substring(i, i + 3);
                switch (s) {
                case "000":
                    octstr.append("0");
                    break;
                case "001":
                    octstr.append("1");
                    break;
                case "010":
                    octstr.append("2");
                    break;
                case "011":
                    octstr.append("3");
                    break;
                case "100":
                    octstr.append("4");
                    break;
                case "101":
                    octstr.append("5");
                    break;
                case "110":
                    octstr.append("6");
                    break;
                case "111":
                    octstr.append("7");
                    break;
                default:
                    break;
                }
            }
            return octstr.toString();
        }
    }
  • 相关阅读:
    My Vim
    POJ 3292 Semi-prime H-numbers
    洛谷P3954 成绩【民间数据】
    数据结构—栈/队列
    说服式设计(persuasive design)的行为模型
    发送邮件给某人:mailto标签
    如何识别和利用用户情绪
    HDU Good Numbers (热身赛2)
    atlas z 轴
    什么叫“默认邮件客户端没有正确安装”?
  • 原文地址:https://www.cnblogs.com/Alpharun/p/8623036.html
Copyright © 2011-2022 走看看