zoukankan      html  css  js  c++  java
  • 算法笔记_033:十六进制转八进制(Java)

    目录

    1 问题描述

    2 解决方案

    2.1 注意问题

    2.2 具体实现代码

     


    1 问题描述

     具体问题描述
      给定n个十六进制正整数,输出它们对应的八进制数。

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

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

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

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

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

     


    2 解决方案

    2.1 注意问题

    解决方案:

    2.2 具体实现代码

    package com.liuzhen.systemExe;
    
    import java.util.Scanner;
    
    public class Main {
        //把16进制字符串转成2进制字符串
        public String getSixteenToTwo(String A){
            StringBuilder result = new StringBuilder("");
            char[] arrayA = A.toCharArray();
            for(int i = 0;i < arrayA.length;i++){
                int temp;
                if(arrayA[i] >= 'A' && arrayA[i] <= 'F'){
                    temp = arrayA[i] - 'A' + 10;
                }
                else 
                    temp = arrayA[i] - '0';
                result.append(getNumberToTwo(temp));
                    
            }
            String result1 = result.toString();
            return result1;
        }
        //把一个数字0~15转换成4位2进制
        public String getNumberToTwo(int n){
            StringBuilder result = new StringBuilder("");
            for(int i = 0;i < 4;i++){
                int temp = n%2;
                result.append(temp);
                n = n/2;
            }
            String temp1 = result.toString();
            temp1 = getReverseString(temp1);
            return temp1;
        }
        //把2进制字符串转成8进制字符串
        public String getTwoToEight(String A){
            if(A.length() % 3 == 1)
                A = "00" + A;
            if(A.length() % 3 == 2)
                A = "0" + A;
            char[] arrayA = A.toCharArray();
            StringBuilder result = new StringBuilder("");
            int count = 0;
            int tempResult = 0;
            for(int i = arrayA.length-1;i >= 0;i--){
                    int temp = arrayA[i] - '0';
                    tempResult += (int) (temp*Math.pow(2, count++));
                    if(count == 3){
                        count = 0;
                        result.append(tempResult);
                        tempResult = 0;
                    }
            }
            String result1 = result.toString();
            result1 = getReverseString(result1);
            result1 = getNonoZeroString(result1);
            return result1;
        }
        //反转字符串
        public String getReverseString(String A){
            char[] arrayA = A.toCharArray();
            int start = 0;
            int end = arrayA.length-1;
            while(start < end){
                char temp = arrayA[start];
                arrayA[start++] = arrayA[end];
                arrayA[end--] = temp;
            }
            return String.valueOf(arrayA);
        }
        //去掉字符串前面的0
        public String getNonoZeroString(String A){
            char[] arrayA = A.toCharArray();
            int count = 0;
            for(int i = 0;i < arrayA.length;i++){
                if(arrayA[i] == '0')
                    count++;
                else
                    break;
            }
            char[] result = new char[arrayA.length-count];
            for(int i = 0;i < arrayA.length-count;i++)
                result[i] = arrayA[count+i];
            return String.valueOf(result);
        }
        
        public static void main(String[] args){
            Main test = new Main(); 
            Scanner in = new Scanner(System.in);
            //System.out.println("请输入一个正整数n:");
            int n = in.nextInt();
            in.nextLine();
            //System.out.println("请输入n个十六进制数:");
            String[] A = new String[n];
            for(int i = 0;i < n;i++){
                String temp = in.nextLine();
                A[i] = temp;
            }
            in.close();
            String[] result = new String[n];
            for(int i = 0;i < n;i++){
                result[i] = test.getTwoToEight(test.getSixteenToTwo(A[i]));
                System.out.println(result[i]);
            }    
        }
    }

     PS:提交了9次。。。

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6407950.html
Copyright © 2011-2022 走看看