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

简介: 给定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

谢谢大家的三连!

目录
相关文章
|
2月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 十六进制转十进制
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 十六进制转十进制
33 0
|
2月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
28 0
|
Java 测试技术
【java蓝桥杯基础题】十进制转十六进制
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。   给出一个非负整数,将它表示成十六进制的形式。
97 0
|
Java
【java蓝桥杯基础试题】十六进制转十进制
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。   注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
101 0
|
Java
蓝桥杯十进制转十六进制Java
蓝桥杯十进制转十六进制Java
56 0
|
C++
第十三届蓝桥杯B组C++(试题A:九进制转十进制)
本题考点为进制转换,较为简单,参考二进制转换为十进制的方法。
129 0
第十三届蓝桥杯B组C++(试题A:九进制转十进制)
蓝桥杯 试题 基础练习 十六进制转十进制
蓝桥杯 试题 基础练习 十六进制转十进制
|
2月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
65 0
|
2月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
53 0
|
2月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
51 0