蓝桥杯基础训练】十六进制转八进制

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

十六进制转八进制

资源限制

时间限制:1.0s   内存限制:512.0MB

问题描述

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


输入格式

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

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


输出格式

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


  【注意

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

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


样例输入

  2

  39

  123ABC


样例输出

  71

  4435274


  【提示

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

分析:根据提示我们可以将十六进制数字转换为二进制然后在转换为八进制,我们不使用系统提供的函数(Integer内置函数)来转换因为费内存无法在给定条件内计算出来。我们可以使用StringBuffer函数来保存转换后的函数;可以使用它的.append()方式进行追加,insert()进行插入;下面我们看代码:

import java.util.Scanner;
public class Main {
   public static void main(String[] args) {
     //赋值的过程
          Scanner sc=new Scanner(System.in);
          int i=sc.nextInt();
          String[] arr=new String[i];
          for (int j = 0; j < i; j++) {
        arr[j]=sc.next();
      }
    //转化为二进制
          for (int j = 0; j < arr.length; j++) {
            //存放转换为二进制
            StringBuffer s=new StringBuffer();
            //对每一位进行判断
           for (int k = 0; k < arr[j].length(); k++) {
         switch(arr[j].charAt(k)) {
         case '0':
           s.append("0000");
           break;
         case '1':
           s.append("0001");
           break;
         case '2':
           s.append("0010");
           break;
         case '3':
           s.append("0011");
           break;
         case '4':
           s.append("0100");
           break;
         case '5':
           s.append("0101");
           break;
         case '6':
           s.append("0110");
           break;
         case '7':
           s.append("0111");
           break;
         case '8':
           s.append("1000");
           break;
         case '9':
           s.append("1001");
           break;
         case 'A':
           s.append("1010");
           break;
         case 'B':
           s.append("1011");
           break;
         case 'C':
           s.append("1100");
           break;
         case 'D':
           s.append("1101");
           break;
         case 'E':
           s.append("1110");
           break;
         case 'F':
           s.append("1111");
           break;
         }
} 
        //保证正好是3的倍数位,用来转换为八进制 4 2 1
           String s1="";
           while(s.length()%3!=0) {
             s=s.insert(0, "0");
           }
           s1=s.toString();
           //用来存放转换为八进制后的值
           StringBuffer sb=new StringBuffer();
           //进行对字符出遍历
           for (int k = 0; k < s1.length(); k+=3) {
             //每三位进行一次判断
             //因为转换为二进制只有0或者1所以用这个方法转换八进制
               //每三位二进制进行转换八进制
      int s2=(s1.charAt(k)-48)*4+(s1.charAt(k+1)-48)*2+(s1.charAt(k+2)-48)*1;
      //对边界值进行判断
      if(k!=0||k==0&&s2!=0) {
        sb.append(s2);
      }
    }
           //输出字符串
           System.out.println(sb);
      }
}
}

image.gif

谢谢大家的三连!

目录
相关文章
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
62 2
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
65 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-42 算法训练 送分啦
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-42 算法训练 送分啦
58 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-8 算法训练 操作格子 线段树
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-8 算法训练 操作格子 线段树
55 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-5 算法训练 最短路
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-5 算法训练 最短路
39 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-3 算法训练 K好数
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-3 算法训练 K好数
65 0
|
6月前
|
算法 Java Serverless
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
56 1
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
54 1
|
6月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-7 算法训练 逆序对 平衡二叉树
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-7 算法训练 逆序对 平衡二叉树
55 0
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
38 0