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

时间限制:1.0s 内存限制:512.0MB

提交此题 锦囊1 锦囊2

问题描述

  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

  输入的第一行为一个正整数n (1<=n<=10)。

  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

  输出n行,每行为输入对应的八进制正整数。

【注意】

  输入的十六进制数不会有前导0,比如012A。

  输出的八进制数也不能有前导0。

样例输入

  2

  39

  123ABC

样例输出

  71

  4435274

【提示】

  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

  

这里一共介绍了三种方法,

import java.util.Arrays;
import java.util.Scanner; public class 十六进制转八进制 { //第一种方法就是用Integer.parseInt(a,b);
//接收字符串a然后以b进制去接受它
//再用Integer.toString(a, b)把a从十进制转换成b进制的数字 // public static void main(String[] args) {
// Scanner sc =new Scanner(System.in);
// int n = sc.nextInt();
// for (int i = 0; i <n; i++) {
// String a = sc.next();
// int b = Integer.parseInt(a,16);
// // System.out.println(b);
// String ss =Integer.toString(b, 8);
// System.out.println(ss);
// }
// } //第二种方法就是Integer类自带的二进制,八进制,十六进制
//Integer.valueOf(a, b)这个的用法和上面那个parseInt一样 // public static void main(String[] args) {
// Scanner in=new Scanner(System.in);
// int n=in.nextInt();
// String [] result=new String[11];
// for(int i=0;i<n;i++){
// String h=in.next();
// String b=Integer.toBinaryString(Integer.valueOf(h, 16));
// String o=Integer.toOctalString(Integer.valueOf(b, 2));
// result[i]=o;
// }
// for(int i=0;i<n;i++){
// System.out.println(result[i]);
// }
// } //第三种就是比较传统的自己写出各种进制的表,这里就要用到二进制和八进制的关系了
//这里大概说一下,如果想继续钻研的可以自己百度一下
//因为是这里最高是16进制每一个二进制的里面都对着一个16进制的数字
//因为正好2的4次方是16进制,2进制的四位数正好把每一个四进制的数都一一对应着
//取得时候直接按照相等的值取就可以了
//这道题就是先把16进制转换成二进制,再按照对应的方法取八进制对应的值 public static void main(String[] args) {
// 接受输入 n
Scanner scanner = new Scanner(System.in);
String input_n = scanner.nextLine();
int n = Integer.parseInt(input_n); // 接受输入十六进制数的字符串
String[] input_nums = new String[n];
for (int i = 0; i < n; i++) {
input_nums[i] = scanner.nextLine();
}
scanner.close();
// 十六进制表
String[] HEXs = {
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "A", "B", "C", "D", "E", "F"
};
// 二进制表
String[] BINs = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
};
// 八进制表
String[] OCTs = {
"0", "1", "2", "3", "4", "5", "6", "7"
}; // 十六进制表和二进制表,在所有成员上值一一对应
// 十六进制表、二进制表和八进制表,在前八位成员上值一一对应 for (int m = 0; m < n; m++) { // 遍历每个十六进制数字
String hex = input_nums[m]; // 十六进制表示形式
StringBuffer sbBin = new StringBuffer();
StringBuffer sbOct = new StringBuffer(); // 十六进制转二进制
// 将十六进制数每一位转换成四位的二进制数字
for (int i = 0; i < hex.length(); i++) { // 遍历每个十六进制位
String c = Character.toString(hex.charAt(i));
// 查询当前位字符在 HEXs中的下标
int index = Arrays.binarySearch(HEXs, c);
sbBin.append(BINs[index]);
} // 在二进制数前面插入若干个"0",使得二进数的位数为 3 的倍数
while (sbBin.length() % 3 != 0) {
sbBin.insert(0, "0");
}
int octLen = sbBin.length() / 3; // 计算目标八进制数的长度
// 每次取三位二进制数,转换成对应的八进制
for (int i = 0; i < octLen; i++) {
String span = sbBin.substring(3 * i, 3 * i + 3);
int index = Arrays.binarySearch(BINs, "0" + span);
sbOct.append(OCTs[index]);
} // 此时已经得到结果,需要去除前导 0
while (sbOct.charAt(0) == '0') {
sbOct.delete(0, 1);
} System.out.println(sbOct.toString());
}
} }

Java实现蓝桥杯十六进制转八进制的更多相关文章

  1. 蓝桥杯 十六进制转八进制(超大测试数据,java实现)

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

  2. 日期求星期(java)-蓝桥杯

    日期求星期问题(java)-蓝桥杯 1:基姆拉尔森计算公式(计算星期) 公式: int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 此处y,m,d指代年 ...

  3. Java实现 蓝桥杯VIP 基础练习 高精度加法

    java算法 蓝桥杯 高精度加法 问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数 ...

  4. java算法 蓝桥杯 乘法运算

    问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...

  5. java算法 蓝桥杯 扶老奶奶街

    一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...

  6. java算法 蓝桥杯 高精度加法

    问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...

  7. java算法 蓝桥杯 格子位置

    问题描述 输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行.同列.同一对角线的所有格子的位置. 输入格式 输入共三 ...

  8. 日期类的使用(java)-蓝桥杯

    蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...

  9. java算法 蓝桥杯 文化之旅

    问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...

随机推荐

  1. JAVA知识总结(二):封装

    时隔近一年,我突然想起来这个文章还没有发完,所以就继续开始写.也不知道自己上次写到哪里了,不管了这里从面向对象的三个特性说起. 类和对象 在这之前,我们先了解什么是对象,已经什么是面向对象?对象:万物 ...

  2. STM32 外部中断详解(原理+配置代码)

    本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断 文章目录 1 前言 2 STM32的外部中断 3 中断服务函数的映射关系 4 外部中断的配置 5 寄存器的 ...

  3. Web快速输入标签

    在书写web代码的时候,掌握一些快捷输入方式不仅可以提高效率,还能省不少力气. 1. > :下一个子标签,如 div>p 加Tab达到: <div><p></ ...

  4. sqli-labs之Page-1

    搭建与安装 参考:https://www.fujieace.com/penetration-test/sqli-labs-ec.html 下载:sqli-labs下载 第一关:单引号报错注入 ?id= ...

  5. 这或许是最详细的JUC多线程并发总结

    多线程进阶---JUC并发编程 完整代码传送门,见文章末尾 1.Lock锁(重点) 传统 Synchronizd package com.godfrey.demo01; /** * descripti ...

  6. PAT 1015 Reversible Primes (20分) 谜一般的题目,不就是个进制转换+素数判断

    题目 A reversible prime in any number system is a prime whose "reverse" in that number syste ...

  7. sublime text 3 关联鼠标右击

    比如有网上有如下方法 https://my.oschina.net/adairs/blog/466777 , 其实一个更简单的方法是运行sublime setup.exe , 直接会有相关提示,下一步 ...

  8. MySQL 间隙锁

    一.根据案例二:不同索引加锁顺序的问题,模拟重现死锁(详细操作步骤) 1.RR级别下,更新操作默认会加行级锁,行级锁会对索引加锁 2.如果更新语句使用多个索引,行级锁会先锁定普通索引,再锁定聚簇索引 ...

  9. 蓝桥杯 试题 算法提高 宰羊 DP解决

    问题描述 炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃. 炫炫家有N只羊,羊圈排成一排,标号1~N.炫炫每天吃掉一只羊(这食量!其实是放生啦),吃掉的羊的邻居会以为它被放生了,然后又会告诉他们的邻居 ...

  10. overflow:hidden的清除浮动效果

    我们都知道"overflow:hidden"可以溢出隐藏,即当内容元素的高度大于其包含块的高度时,设置该属性即可把内容区域超出来的部分隐藏,使内容区域完全包含在该包含块中. 然而& ...