试题 基础练习 十六进制转八进制

资源限制
时间限制: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. 蓝桥杯 基础练习 十六进制转八进制

    目录: 1.原题 2.解题思路 3.代码实现 1.原题 资源限制 内存限制:512.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s问题 问 ...

  2. 蓝桥杯 基础练习 十六进制转八进制

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  3. 蓝桥杯-基础练习 十六进制转八进制

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  4. 蓝桥杯——基础练习 十六进制转八进制

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转 ...

  5. 蓝桥杯基础练习 十六进制转十进制 Java

    问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 6 ...

  6. [蓝桥杯]基础练习 十六进制转八进制

    16进制转成2进制,2进制转成8 #include<iostream> #include<string> #include<vector>using namespa ...

  7. 十六进制转八进制java_基础练习-十六进制转八进制 -JAVA蓝桥杯

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

  8. 蓝桥杯练习题之十六进制转八进制

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

  9. 蓝桥杯——基础练习——十六进制转十进制

    package com.study.蓝桥杯.基础练习;/* 问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出.注:十六进制数中的10~15分别用大写的英文字母A.B ...

  10. 蓝桥杯C语言 十六进制转八进制

    十六进制转八进制 思路分析: 39十六进制先转换为4位二进制,3为0011,9为1001,所以39的二进制为00111001,又把二进制转化为3位八进制,从右边开始数,001为1,111为7,所以39 ...

最新文章

  1. [英文面試]如何寫面試後的感謝信
  2. MySQL数据库的数据类型decimal详解
  3. 软件工程心理学之9----乙方如何面对甲方2
  4. python输入序列语句_Python基础教程(一) - 序列:字符串、列表和元组
  5. win10系统能做域服务器吗,Win10 LTSC 加入 Windows Server 2019 域服务器
  6. Notepad++便签模式
  7. 【LeetCode】【HOT】208. 实现 Trie (前缀树)
  8. java 分库关联查询工具类
  9. 【VS开发】MFC修改Opencv namedWindow的风格
  10. 史上最全 Android 面试资料集合
  11. Android水平仪实训报告,测量实训报告范文3篇
  12. 玩游戏显示计算机内存不足怎么办,电脑魔兽世界内存不足怎么办
  13. 弹出框(bootStrap模态框、bootbox、dbailog)
  14. python中判断素数的几种方法
  15. Java实现四则运算
  16. 抖音小程序怎么注册?一文看懂抖音小程序注册开发流程
  17. 手机录制的视频怎么旋转回来
  18. 2015私人阅读十五佳
  19. 2K和XP的CMD命令教程(命令篇.要求置顶)
  20. 闲扯测试工程师之发展(觉得不错,拿来与大家分享)

热门文章

  1. NeurIPS 2021有哪些值得读的NLP论文?
  2. baseline发布!OPPO安全AI挑战赛,人脸识别对抗攻击赛题详解
  3. ACL 2021 | 结构化知识蒸馏方法
  4. python引用传递的区别_python的值类型和引用类型及值传递和引用传递的区别
  5. ORACLE数据库实现自增的方式
  6. 「中间件系列一」kafka消息中间件
  7. activiti配置实现用户多实例
  8. Java实现doc或xls转PDF
  9. CG CTF WEB 单身一百年也没用
  10. php考察新人的题目,PHP面试指南2020-sql考察题