【蓝桥杯】基础练习 十六进制转八进制(Java实现)
试题 基础练习 十六进制转八进制
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述 给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、 大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
分析
题中说了“每个十六进制数长度不超过100000”,这个长度哪怕是long类型也容纳不下,所以不能先转换成10进制,再转换成8进制。
具体16 -》2-》8
Java代码实现
package cn.com.codingce.lq.base;import java.util.Scanner;public class HexadecimalToOctal {// 定义常量字符串static String[] bin = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010","1011", "1100", "1101", "1110", "1111"};static String[] otc = {"0", "1", "2", "3", "4", "5", "6", "7"};public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); // n个十六进制正整数String[] str = new String[n]; // 接收十六进制正整数的数组// 接收十六进制正整数for (int i = 0; i < n; i++) {str[i] = sc.next();}for (int i = 0; i < n; i++) {String result = hexToBin(str[i]).toString();String octResult = binToOct(result.toString());if (octResult.startsWith("0")) {octResult = octResult.substring(1);// substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。// 该子字符串从指定索引处的字符开始,直到此字符串末尾。}System.out.println(octResult);}}// 十六进制转换成二进制@SuppressWarnings("unused")private static StringBuffer hexToBin(String str) {int length = str.length();int start = 0;int end = 1;StringBuffer result = new StringBuffer();for (int i = 0; i < length; i++) {/** substring(int beginIndex,int endIndex)返回一个新字符串,它是此字符串的一个子字符串。 该子字符串从指定的* beginIndex 处开始,直到索引 endIndex - 1 处的字符。 因此,该子字符串的长度为 endIndex-beginIndex。*/String subStr = str.substring(start, end); // 抽取一个十六进制字符start++;end++;String s = transform(subStr); // 将抽取的十六进制字符转换成二进制字符result.append(s);}return result;}// 二进制转换成八进制@SuppressWarnings("unused")private static String binToOct(String str) {int length = str.length();/** 二进制字符串的长度不是3的整数倍的时候,就要在字符串的前面补上相应个数的 ‘0’ 来让二进制字符串的长度变成3的整数倍*/if (length % 3 == 1) {str = "00" + str;} else if (length % 3 == 2) {str = "0" + str;}int start = 0;int end = 3;StringBuffer sb = new StringBuffer();for (int i = 0; i < str.length() / 3; i++) {String subStr = str.substring(start, end); // 抽取三个二进制字符start += 3;end += 3;String s = transform2(subStr); // 将抽取的二进制字符串转换成八进制字符sb.append(s);}return sb.toString();}/*** 将抽取的十六进制字符转换成二进制字符** @param str* @return*/@SuppressWarnings("unused")private static String transform(String str) {String result = "";switch (str) {case "0":result = bin[0];break;case "1":result = bin[1];break;case "2":result = bin[2];break;case "3":result = bin[3];break;case "4":result = bin[4];break;case "5":result = bin[5];break;case "6":result = bin[6];break;case "7":result = bin[7];break;case "8":result = bin[8];break;case "9":result = bin[9];break;case "A":result = bin[10];break;case "B":result = bin[11];break;case "C":result = bin[12];break;case "D":result = bin[13];break;case "E":result = bin[14];break;case "F":result = bin[15];break;default:break;}return result;}/*** 将抽取的二进制字符串转换成八进制字符** @param str* @return*/@SuppressWarnings("unused")private static String transform2(String str) {String result = "";switch (str) {case "000":result = otc[0];break;case "001":result = otc[1];break;case "010":result = otc[2];break;case "011":result = otc[3];break;case "100":result = otc[4];break;case "101":result = otc[5];break;case "110":result = otc[6];break;case "111":result = otc[7];break;default:break;}return result;}
}
【蓝桥杯】基础练习 十六进制转八进制(Java实现)相关推荐
- 蓝桥杯 基础练习 十六进制转八进制
目录: 1.原题 2.解题思路 3.代码实现 1.原题 资源限制 内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题 问 ...
- 蓝桥杯 基础练习 十六进制转八进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...
- 蓝桥杯-基础练习 十六进制转八进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...
- 蓝桥杯——基础练习 十六进制转八进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...
- 蓝桥杯基础练习 十六进制转十进制 Java
问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 6 ...
- [蓝桥杯]基础练习 十六进制转八进制
16进制转成2进制,2进制转成8 #include<iostream> #include<string> #include<vector>using namespa ...
- 十六进制转八进制java_基础练习-十六进制转八进制 -JAVA蓝桥杯
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n< ...
- 蓝桥杯练习题之十六进制转八进制
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n< ...
- 蓝桥杯——基础练习——十六进制转十进制
package com.study.蓝桥杯.基础练习;/* 问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出.注:十六进制数中的10~15分别用大写的英文字母A.B ...
- 蓝桥杯C语言 十六进制转八进制
十六进制转八进制 思路分析: 39十六进制先转换为4位二进制,3为0011,9为1001,所以39的二进制为00111001,又把二进制转化为3位八进制,从右边开始数,001为1,111为7,所以39 ...
最新文章
- [英文面試]如何寫面試後的感謝信
- MySQL数据库的数据类型decimal详解
- 软件工程心理学之9----乙方如何面对甲方2
- python输入序列语句_Python基础教程(一) - 序列:字符串、列表和元组
- win10系统能做域服务器吗,Win10 LTSC 加入 Windows Server 2019 域服务器
- Notepad++便签模式
- 【LeetCode】【HOT】208. 实现 Trie (前缀树)
- java 分库关联查询工具类
- 【VS开发】MFC修改Opencv namedWindow的风格
- 史上最全 Android 面试资料集合
- Android水平仪实训报告,测量实训报告范文3篇
- 玩游戏显示计算机内存不足怎么办,电脑魔兽世界内存不足怎么办
- 弹出框(bootStrap模态框、bootbox、dbailog)
- python中判断素数的几种方法
- Java实现四则运算
- 抖音小程序怎么注册?一文看懂抖音小程序注册开发流程
- 手机录制的视频怎么旋转回来
- 2015私人阅读十五佳
- 2K和XP的CMD命令教程(命令篇.要求置顶)
- 闲扯测试工程师之发展(觉得不错,拿来与大家分享)