蓝桥杯基础训练十六进制转八进制(简单)
2018-02-12 22:31
330 查看
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
参考:
http://blog.csdn.net/qq_36717487/article/details/79210221
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); String s[] = new String ; //下面对每一个16进制字符串进行操作 for (int i = 0; i < s.length; i++) { s[i] = cin.next(); String str = toBinary(s[i]);// 将16进制字符串转换成2进制字符串 //因为要转换成8进制,所以2进制字符串的长度必须是3的倍数 if (str.length()%3 == 1) { str = "00"+str; }else if (str.length()%3 == 2) { str = "0"+str; } toOctal(str);//将2进制字符串转换成8进制 System.out.println(); } } //将2进制字符串转换成8进制 方法 private static void toOctal(String str) { // 先处理最开头的3位,因为这3位组成的8进制数可能为0,如果为0,要去掉。这是题目要求 int a = (str.charAt(0)-'0')*4+(str.charAt(1)-'0')*2+(str.charAt(2)-'0')*1; //取完3位之后,那么紧跟着的 那一个3位组合 所构成的 8进制数 一定不为0。 //题目要求说 8进制的结果开头不能为0 if (a != 0) { System.out.print(a); } for (int i = 3; i < str.length(); i+=3) { a = (str.charAt(i)-'0')*4+(str.charAt(i+1)-'0')*2+(str.charAt(i+2)-'0' a7b1 )*1; //为什么这里就不需要再去判断a 是否为0? //因为16进制输入 不会有0,所以当取完前3个,并且前3个为0时,那么下一个3位组合的8进制值 一定不为0. System.out.print(a); } } private static String toBinary(String string) { // 解释一下为什么要用StringBuilder。 // StringBuilder 是可变长度的字符序列,而String是固定长度的 //String 每次相加,虽然长度变了,但是这是一个新的String实例 //所以,频繁的相加,会增加开销 //StringBuilder 可以随便增加 StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < string.length(); i++) { switch (string.charAt(i)) { case '0': sBuilder.append("0000"); break; case '1': sBuilder.append("0001"); break; case '2': sBuilder.append("0010"); break; case '3': sBuilder.append("0011"); break; case '4': sBuilder.append("0100"); break; case '5': sBuilder.append("0101"); break; case '6': sBuilder.append("0110"); break; case '7': sBuilder.append("0111"); break; case '8': sBuilder.append("1000"); break; case '9': sBuilder.append("1001"); break; case 'A': sBuilder.append("1010"); break; case 'B': sBuilder.append("1011"); break; case 'C': sBuilder.append("1100"); break; case 'D': sBuilder.append("1101"); break; case 'E': sBuilder.append("1110"); break; case 'F': sBuilder.append("1111"); break; } } return sBuilder.toString(); } }
参考:
http://blog.csdn.net/qq_36717487/article/details/79210221
相关文章推荐
- 蓝桥杯基础训练十六进制转八进制(不简单)
- 蓝桥杯 基础训练 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯练习-基础练习-十六进制转八进制
- 蓝桥杯-基础练习-BASIC-12-十六进制转八进制
- 蓝桥杯OJ刷题日记——12-基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯- 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯基础练习 十六进制转八进制
- "蓝桥杯“基础练习:十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯 12 基础练习 十六进制转八进制
- 【蓝桥杯练习系统】 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯 【基础练习】 十六进制转八进制
- 蓝桥杯——基础练习 十六进制转八进制
- 蓝桥杯-基础练习 十六进制转八进制
- [蓝桥杯]基础练习 十六进制转八进制