【无标题】蓝桥杯java 给定n个十六进制正整数,输出它们对应的八进制数
做这道题时,编译器上没问题,放到蓝桥杯上就出问题了,后来网上搜了下,才知道看错题了,输入数据长度不超过100000,不是大小。然后看到一位大佬用C语言写的,三位三位的转换。
C代码链接[https://zhuanlan.zhihu.com/p/455497136]
然后下面是我自己用java实现的,有注释我自己的理解。
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
package pra1220;import java.util.Scanner;/*** 资源限制* 时间限制:1.0s 内存限制:512.0MB* 问题描述* 给定n个十六进制正整数,输出它们对应的八进制数。** 输入格式* 输入的第一行为一个正整数n (1<=n<=10)。* 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。** 输出格式* 输出n行,每行为输入对应的八进制正整数。** 【注意】* 输入的十六进制数不会有前导0,比如012A。* 输出的八进制数也不能有前导0。** 样例输入* 2* 39* 123ABC** 样例输出* 71* 4435274** 【提示】* 先将十六进制数转换成某进制数,再由某进制数转换成八进制。*/public class Basic12{public static void main(String[] args) {/*** 解决思路,3个十六进制(12位二进制)对应4个八进制(12位二进制),把一个十六进制的数拆成一堆三位三位的数,然后三位三位的转换为八进制,最后拼起来就是最终结果* 首先对于给定的十六进制输入长度取余,如果不是3的整数倍,则在第一次进行分段转换时根据缺的位数在前面补零* n:需要输入的数据个数* b[3](char[]):暂存3个十六进制* first(boolean):对于每个十六进制数据,判断是否是最前面的三位(即第一次分段转换),然后根据需要进行补零* len:每一个十六进制数据的长度* temp_result(String):暂存一个十六进制数到八进制数转换过程的每次的小转换(3个16进制位换成4个八进制位)结果*/Scanner scanner = new Scanner(System.in);// 输入n个十十六进制数int n = scanner.nextInt();String[] input = new String[n];scanner.nextLine(); //消除回车键的影响for(int i=0;i<n;i++){input[i] = scanner.nextLine();}scanner.close();char[] b = new char[3];int len=0,d=0,k=0;Boolean first = true;String temp_result;for(int i=0;i<n;i++){len = input[i].length(); // 获取该十六进制数的长度k=0;d = len%3==0 ? 3 : len%3; //判断十六进制数长度是否为3的整数倍
// System.out.println("d"+d);if(d==2){ //不是整数倍,取余结果为2,该十六进制数前补1个0,凑3的整数被b[k++] = '0';}if(d==1){ //同理,不是整数倍,取余结果为1,补两个0b[k++] = '0';b[k++] = '0';}first = true; //重新将first置为true/*** 将十六进制数转换为八进制数*/for(int j=0;j<len;j++){b[k++] = input[i].charAt(j); //取出该十六进制数的一位d--;
// System.out.println(new String(b));if(d==0){ //当d==0,即b满了,成功取了3位十六进制数,开始转换为4位八进制数d=3;k=0; //重新置零// 3位十六进制-->4位八进制temp_result = Integer.toOctalString(Integer.parseInt(String.valueOf(b),16));if(first){ //如果是第一次(前三位十六进制)则不进行补零操作,first = false;}else{ // 因为每次由转换得到的八进制结果可能不足4位(0x123--->0o0443,0443前面的零会被省略),如果不补零,那么合起来的结果就是错了if(temp_result.length()==3){temp_result = "0"+temp_result;}else if(temp_result.length()==2){temp_result = "00" + temp_result;}else if(temp_result.length()==1){temp_result = "000" +temp_result;}else if(temp_result.length() == 0){temp_result = "0000";}}System.out.print(temp_result); //直接输出转换后的4位八进制,但不换行,最后连起来就是一个16进制数转换的结果}}System.out.println(); //完成一个16进制数的转换,才换行}}
}
【无标题】蓝桥杯java 给定n个十六进制正整数,输出它们对应的八进制数相关推荐
- 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
- 2016年 第7届 蓝桥杯 Java B组 省赛解析及总结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
- 2014年 第5届 蓝桥杯 Java B组 省赛解析及总结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
- 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...
- 2017年 第8届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 蓝桥杯Java历年真题与答案_蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的)...
蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的) 1蓝桥杯 java 历年真题及答案整理(闭关一个月,呕心沥血整理出来的)1. 算法是这样的,如果给定 N 个不同字符,将这 N 个 ...
- 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...
最新文章
- 2019年陕西省普通高校招生考生成绩统计表(理工、艺理、体育)
- 【vscode】python工作目录添加到环境中
- apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本
- MySQL 锁与MVCC :数据库的锁、MVCC、当前读、快照读、锁算法、死锁
- 【PAT甲级 排列组合】1093 Count PAT's (25 分) C++ 全部AC
- 《软件工程》 教 学 大 纲
- halcon/c++接口基础 之 控制参数
- linux下mysql区分大小写的内容
- python炒股日记_自学python的日记分享
- 短信转移到另一个手机接收_如何将iPhone手机接收短信同步到另外一台设备上?...
- mysql查询时去除重复数据以及 FOUND_ROWS 统计记录函数
- 三四线城市的房地产泡沫率先崩盘?
- Python模拟锟斤拷等各类乱码
- python--len函数的用法
- .Net 5中对于http请求的压缩和解压缩(GZip,Brotli)
- 国外计算机著名核心期刊介绍(转)
- 无忧计算机二级试题题库,计算机等级考试题库,二级Web试题
- Oracle-07:别名,去重,子查询
- js 获取元素所有兄弟节点实例
- 车载TBOX嵌入式设备软件的功能测试
热门文章
- 解决机械革命等笔记本电脑系统无法完成更新无法关机自动重启问题的两种方案
- STM32使用DAP下载出错Error: Flash Download failed - “Cortex-M3“
- 十年创投盛会,第十届金鸡湖创业大赛总决赛18日启幕
- 实习记——《Rethink》
- 低于4G内存安装 Jumpserver
- 通过Google内置计步器和加速度传感器制作android计步程序(附源码)
- 游戏开发中的人工智能(十一):规则式 AI
- 基本项目_家庭记录收支程序
- 哈里波特6:混血王子英文有声版 下载链接
- 真手把手带你跑r3live by 自己设备 (二)