蓝桥杯 十六进制转八进制 字符串处理
2018-03-11 14:57
148 查看
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
思路:
一开始先将十六进制转换成10进制,再转换成8进制。结果出错,因为数的范围在2的4*10e5次方范围内,long long也无法表示,只能字符串来做,就是先把16进制转换成2进制,再从2进制转换成8进制。
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
思路:
一开始先将十六进制转换成10进制,再转换成8进制。结果出错,因为数的范围在2的4*10e5次方范围内,long long也无法表示,只能字符串来做,就是先把16进制转换成2进制,再从2进制转换成8进制。
public class SixteenToEight { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int sum; int item; int start = 0; for (int count=0; count<n; count++ ) { String input = sc.next(); String BinaryString = transform(input); // System.out.println(BinaryString); int left = BinaryString.length()%3; String temp = null; item = 1; sum = 0; start = 0; if ( left==1 ) { temp = BinaryString.substring(0,left); for ( int i=left-1; i>=0; i-- ) { sum += item*(int)( temp.charAt(i)-'0' ); item *= 2; } if ( sum!=0 ) System.out.print(sum); start = 1; } if ( left==2 ) { temp = BinaryString.substring(0,left); for ( int i=left-1; i>=0; i-- ) { sum += item*(int)( temp.charAt(i)-'0' ); item *= 2; } if ( sum!=0 ) System.out.print(sum); start = 2; } for ( ; start<BinaryString.length(); start+=3 ) { sum = 0 ; item = 4 ; for ( int i=0; i<3; i++ ) { sum += item*(int)( BinaryString.charAt(i+start)-'0' ); item /=2 ; } if ( start==0 && sum==0 ) continue; System.out.print(sum); } System.out.println(); } } public static String transform( String origin ) { StringBuilder ans = new StringBuilder(""); String s = null; for ( int i=0; i<origin.length(); i++ ) { switch ( origin.charAt(i) ) { case '0': s = "0000"; break; case '1': s = "0001"; break; case '2': s = "0010"; break; case '3': s = "0011"; break; case '4': s = "0100"; break ; case '5': s = "0101"; break; case '6': s = "0110"; break; case '7': s = "0111"; break; case '8': s = "1000"; break; case '9': s = "1001"; break; case 'A': s = "1010"; break; case 'B': s = "1011"; break; case 'C': s = "1100"; break; case 'D': s = "1101"; break; case 'E': s = "1110"; break; case 'F': s = "1111"; break; default: break; } ans.append(s); } return ans.toString(); } }
相关文章推荐
- 蓝桥杯 基础练习 十六进制转八进制 【字符串处理】
- 蓝桥杯2014年以前JAVA历年真题及答案整理——十六进制转八进制
- 蓝桥杯 周期字串(字符串处理)
- "蓝桥杯“基础练习:十六进制转八进制
- 蓝桥杯 控制台画表格 字符串处理
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯:十六进制转八进制
- 蓝桥杯 高精度加法(字符串处理)
- 蓝桥杯基础训练十六进制转八进制(简单)
- 蓝桥杯 十六进制转八进制
- 蓝桥杯-基础练习-十六进制转八进制(被超时了!!!)
- 使用Python 3.5.2处理十六进制字符串转换为浮点数
- 蓝桥杯基础练习——十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- 蓝桥杯-十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制