• 算法笔记_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次。。。

  • 相关阅读:
    第八篇、UITableView常用功能(左滑出现多个按钮,多选删除等)
    第七篇、hitTest UITabbar中间突出按钮额外增加可点击区域
    第二篇、常用的分类文件
    第一篇、Swift_Textkit的基本使用
    第六篇、git常用的命令
    第五篇、常用的SQL语句和函数介绍
    第四篇、图片轮播查看器
    C# 打开文件或打开文件夹
    HttpHandler使用Session
    C# Response 下载
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6407950.html
Copyright © 2020-2023  润新知