这道题其实挺难的,之前做过一次,用的十六进制转化为十进制,然后用十进制再转化为八进制,代码很简单,用的jdk上自带的进制转换进行换算。

import java.util.Scanner;
/**
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年7月22日 下午4:19:18
*  类说明 十六进制转十进制————十进制转八进制,失败。。。
*/
public class 十六进制转八进制 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String[] str = new String[n];long[] lo = new long[n];String[] st = new String[n];for(int i=0;i<n;i++) {str[i] = sc.next();lo[i] = Long.parseLong(str[i],16);st[i] = Long.toOctalString(lo[i]);}for(int i=0;i<n;i++)System.out.println(st[i]);}
}

很容易就想到,这个方法就不行,因为十六进制数长度不超过100000这个是长度,而且转化为十进制,就算使用long类型的也不够用,所以这个方法就失败了。
后来在网上看了许多代码,基本上都是差不多的思路,将十六进制转化为二进制,二进制再转化为八进制,这样就行了,开始我还在疑问,十进制都不够用,二进制不应该更不够用,其实这里的二进制不是数字类型,而是字符串类型的,字符串可以储存很长啊。

import java.util.Scanner;/**
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年7月22日 下午8:48:56
*  类说明 十六进制转二进制————二进制转八进制。
*/
public class 十六进制转十进制1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String[] str = new String[n];for(int i=0;i<n;i++) {str[i] = sc.next();}for(int i=0;i<n;i++) {String st = toBinary(str[i]);int len = st.length();if(len%3==1)st = "00"+st;else if(len%3==2)st = "0"+st;String s = toOctal(st);System.out.println(s);}}private static String toOctal(String st) {StringBuffer buf = new StringBuffer();int k = 0;if(st.substring(0, 3).equals("000")) k=3;else k=0;for(int i=k;i<st.length()-2;i+=3) {    //这里的st.length()-2还不是很理解,如果有知道的麻烦告诉我一下,我觉得是st.length()
//          switch(st.substring(i, i+3)) {
//          case "001":buf.append("1");break;
//          case "010":buf.append("2");break;
//          case "011":buf.append("3");break;
//          case "100":buf.append("4");break;
//          case "101":buf.append("5");break;
//          case "110":buf.append("6");break;
//          case "111":buf.append("7");break;
//          default: break;
//      }String string = st.substring(i,i+3);if(string.equals("000")) buf.append("0");    //一开始还不太理解为什么要这个,如果前面是三个零直接可以省略不要了,后来想想,有可能在中间出现的,例如111 111 000 101.else if(string.equals("001")) buf.append("1");else if(string.equals("010")) buf.append("2");else if(string.equals("011")) buf.append("3");else if(string.equals("100")) buf.append("4");else if(string.equals("101")) buf.append("5");else if(string.equals("110")) buf.append("6");else if(string.equals("111")) buf.append("7");}return buf.toString();}private static String toBinary(String string) {char[] ch = string.toCharArray();StringBuffer buf = new StringBuffer();for(int i=0;i<ch.length;i++) {switch(ch[i]) {case '0':buf.append("0000");break;case '1':buf.append("0001");break;case '2':buf.append("0010");break;case '3':buf.append("0011");break;case '4':buf.append("0100");break;case '5':buf.append("0101");break;case '6':buf.append("0110");break;case '7':buf.append("0111");break;case '8':buf.append("1000");break;case '9':buf.append("1001");break;case 'A':buf.append("1010");break;case 'B':buf.append("1011");break;case 'C':buf.append("1100");break;case 'D':buf.append("1101");break;case 'E':buf.append("1110");break;case 'F':buf.append("1111");break;default: break;}}return buf.toString();}}

这段代码就可以了,最开始我都是用的字符串相加,但是运行超时了,后来再仔细看看他们的代码,都用的StringBuffer来实现字符串拼接,这里我借鉴的别人的方法。介绍的挺不错的。
借鉴:https://blog.csdn.net/qq_35187119/article/details/81280100
https://blog.csdn.net/catchingsun/article/details/50571593

蓝桥杯——十六进制转八进制(Java解法)相关推荐

  1. 蓝桥杯 十六进制转为八进制 C语言版

    ** 蓝桥杯 十六进制转为八进制 ** 题目 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由09.大 ...

  2. 蓝桥杯-十六进制转八进制(java)

    基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB问题描述给定n个十六进制正整数,输出它们对应的八进制数.输入格式输入的第一行为一个正整数n (1<=n<=10).接 ...

  3. 菜菜的刷题日记 | 蓝桥杯 — 十六进制转八进制(纯手撕版)附进制转换笔记

    系列索引:菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子 万万没想到啊,回老家过年断更的几天之后,我会因为无聊在除夕这天做了会儿题,然后写篇题解. 文章目录 [题目] [我的代码] ...

  4. 蓝桥杯:十六进制转八进制

    基础练习 十六进制转八进制 时间限制:1.0s   内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n< ...

  5. 蓝桥杯-十六进制转八进制

    这个题还是有点含金量,第一遍做出来,很可能会超时,比如以下代码: import java.util.ArrayList; import java.util.Scanner;public class M ...

  6. 蓝桥杯——十六进制转八进制

    资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行 ...

  7. 蓝桥杯16转八c语言,蓝桥杯 十六进制转八进制

    思路: 先将十六进制转为二进制,再将二进制转为八进制 代码: #include #include #include #include #include #include #define for1(i, ...

  8. 2021 第十二届 蓝桥杯 国赛决赛 Java B组 真题 详细解析

    文章目录 2021 第十二届 Java B组 国赛 真题答案 详细解析 试题A: 整数范围 答案:255 分析: Code: 试题B: 纯质数 答案:1903 分析: Code: 试题C: 完全日期 ...

  9. c语言奇怪的分式11,蓝桥杯-奇怪的分式-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

最新文章

  1. Linux各个发行版本的选择
  2. BZOJ3233【AHOI2013】找硬币
  3. 其实,人的核心职场时间是有限的,一定要和高手玩
  4. 每日程序C语言21-递归逆序数出字符串
  5. where is page layout xml template being initialized - hard code in ctr
  6. Ubuntu18.0.1 安装 anaconda conda cudnn pytorch-gpu
  7. 他一口气写出了这7k字的红黑树总结!看过的都说好!!|文末送书
  8. 设计每个网站时所追求的5个目标
  9. 《ANSYS Workbench 14有限元分析自学手册》——1.3 ANSYS 14的界面
  10. Tarjan边的双联通
  11. RobotStudio碰撞检测的设定
  12. 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
  13. 基于SSM实现宠物领养网站平台管理系统
  14. 开源项目之MD5校验工具 md5deep
  15. linux显示一列数据的首尾行,tail从文件内容的尾行开始查看命令
  16. 判断无向图G是否是一颗树
  17. 手机照片删除了还能找回来吗?高手就是高手,精彩
  18. JavaScript工具函数宝典(内含95个函数)
  19. 读书笔记 |《小强升职记》
  20. 微信小程序 之 发布流程

热门文章

  1. uniapp 开发微信公众号,下拉框默认选中列表第一个
  2. 令人振奋的新闻 HP首超IBM成全球最大IT公司
  3. Android 字体没效果,AndroidX 自定义字体不生效
  4. 100个python算法超详细讲解:画彩色图形
  5. springboot断点调试
  6. 2018年11月职称计算机考试题,2018年职称计算机综合考试题库.pdf
  7. 无人机学习所遇问题动态记录
  8. Python数据格式化
  9. 华为公布业绩,三季度营收跌幅进一步扩大,但净利润率进一步上升
  10. 关于windows10系统安装字体问题