蓝桥杯——⼗六进制转⼋进制(java)
最近参加蓝桥杯,训练时间遇到⼀个⽐较有意思的题⽬:
问题描述
给定n个⼗六进制正整数,输出它们对应的⼋进制数。
输⼊格式
输⼊的第⼀⾏为⼀个正整数n (1<=n<=10)。
接下来n⾏,每⾏⼀个由0F组成的字符串,表⽰要转换的⼗六进制正整数,每个⼗六进制数长度不超过100000。
9、⼤写字母A
输出格式
输出n⾏,每⾏为输⼊对应的⼋进制正整数。
【注意】
输⼊的⼗六进制数不会有前导0,⽐如012A。
输出的⼋进制数也不能有前导0。
样例输⼊
2
39
123ABC
样例输出
71
4435274
16转10,10转8
看到这个题⽬时,我⾸先想到的是直接⽤Java内部封装好的⽅法,16进制先转10进制,10进制转8进制
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
if (count >= 1 && count <= 10) {
int[] arr = new int[count];
for (int i = 0; i < count; i++) {
String strnum = sc.next();
Integer hexnum = Integer.valueOf(strnum, 16);
String num = OctalString(hexnum);
int result = Integer.parseInt(num); //注意看题⽬,输出8进制正整数!
arr[i] = result;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
}
但当测试的时候发现是错误的,在这个地⽅徘徊了很多次,最后发现他在题⽬中说 每个⼗六进制数长度不超过100000要把这个16进制转换成10进制的话,是超出最⼤范围的,所以不能直接转成10进制
16转2,2转8
后来我就转变了思路,但是Java内部没有直接16转2进制的⽅法所以要⾃⼰写,代码如下
import java.util.Scanner;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); int count = Int();
int[] c = new int[count];
if (count >= 1 && count <= 10) {
for (int i = 0; i < c.length; i++) {
String a = ();
String m = to2(a);
String n = to8(m);
int p = Integer.parseInt(n);
c[i] = p;
}
}
for (int d : c) {
System.out.println(d);
}
}
public static String to2(String m) {
String result = new String();
char[] n = m.toCharArray();
for (int i = 0; i < n.length; i++) {
switch (n[i]) {
case '1':
result = result + "0001";
break;
case '2':
result = result + "0010";
break;
case '3':
result = result + "0011";
break;
case '4':
result = result + "0100";
break;
case '5':
result = result + "0101";
break;
case '6':
result = result + "0110";
break;
case '7':
result = result + "0111";
break;
case '8':
result = result + "1000";
break;
case '9':
result = result + "1001";
break;
case 'A':
result = result + "1010";
break;
case 'B':
result = result + "1011";
break;
case 'C':
result = result + "1100";
break;
case 'D':
result = result + "1101";
result = result + "1101";
break;
case 'E':
result = result + "1110";
break;
case 'F':
result = result + "1111";
break;
default:
break;
}
}
return result;
}
public static String to8(String m) { String result = new String();
//下⾯要注意
if (m.length() % 3 == 1) {
m = "00" + m;
} else if (m.length() % 3 == 2) {
m = "0" + m;
}
int start = 0;
int end = 3;
for (int i = 0; i < m.length() / 3; i++) { String n = m.substring(start, end);
switch (n) {
case "000":
if (i == 0) {
java valueof} else {
result = result + "0";
}
;
break;
case "001":
result = result + "1";
break;
case "010":
result = result + "2";
break;
case "011":
result = result + "3";
break;
case "100":
result = result + "4";
break;
case "101":
result = result + "5";
break;
case "110":
result = result + "6";
break;
case "111":
result = result + "7";
break;
default:
break;
}
start += 3;
end += 3;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论