蓝桥杯——十六进制转八进制(Java解法)
这道题其实挺难的,之前做过一次,用的十六进制转化为十进制,然后用十进制再转化为八进制,代码很简单,用的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解法)相关推荐
- 蓝桥杯 十六进制转为八进制 C语言版
** 蓝桥杯 十六进制转为八进制 ** 题目 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由09.大 ...
- 蓝桥杯-十六进制转八进制(java)
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB问题描述给定n个十六进制正整数,输出它们对应的八进制数.输入格式输入的第一行为一个正整数n (1<=n<=10).接 ...
- 菜菜的刷题日记 | 蓝桥杯 — 十六进制转八进制(纯手撕版)附进制转换笔记
系列索引:菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子 万万没想到啊,回老家过年断更的几天之后,我会因为无聊在除夕这天做了会儿题,然后写篇题解. 文章目录 [题目] [我的代码] ...
- 蓝桥杯:十六进制转八进制
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n< ...
- 蓝桥杯-十六进制转八进制
这个题还是有点含金量,第一遍做出来,很可能会超时,比如以下代码: import java.util.ArrayList; import java.util.Scanner;public class M ...
- 蓝桥杯——十六进制转八进制
资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行 ...
- 蓝桥杯16转八c语言,蓝桥杯 十六进制转八进制
思路: 先将十六进制转为二进制,再将二进制转为八进制 代码: #include #include #include #include #include #include #define for1(i, ...
- 2021 第十二届 蓝桥杯 国赛决赛 Java B组 真题 详细解析
文章目录 2021 第十二届 Java B组 国赛 真题答案 详细解析 试题A: 整数范围 答案:255 分析: Code: 试题B: 纯质数 答案:1903 分析: Code: 试题C: 完全日期 ...
- c语言奇怪的分式11,蓝桥杯-奇怪的分式-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
最新文章
- Linux各个发行版本的选择
- BZOJ3233【AHOI2013】找硬币
- 其实,人的核心职场时间是有限的,一定要和高手玩
- 每日程序C语言21-递归逆序数出字符串
- where is page layout xml template being initialized - hard code in ctr
- Ubuntu18.0.1 安装 anaconda conda cudnn pytorch-gpu
- 他一口气写出了这7k字的红黑树总结!看过的都说好!!|文末送书
- 设计每个网站时所追求的5个目标
- 《ANSYS Workbench 14有限元分析自学手册》——1.3 ANSYS 14的界面
- Tarjan边的双联通
- RobotStudio碰撞检测的设定
- 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
- 基于SSM实现宠物领养网站平台管理系统
- 开源项目之MD5校验工具 md5deep
- linux显示一列数据的首尾行,tail从文件内容的尾行开始查看命令
- 判断无向图G是否是一颗树
- 手机照片删除了还能找回来吗?高手就是高手,精彩
- JavaScript工具函数宝典(内含95个函数)
- 读书笔记 |《小强升职记》
- 微信小程序 之 发布流程