BASIC-12
正确答案:
BASIC-12
一道让我及其想骂人的题目
一开始是十六进制转十进制转八进制
我就知道可能会超限但是我没想到
测试数据长到不算数,就是字符串嘛
所以还是转二进制,之后再转八进制
然后枚举列出来
最后……
运行超时
睡了
明天再搞
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int i;
for (i = 0; i < n; i++) {
String str = scanner.next();
int j, k;
String s = "";
for (j = 0; j < str.length(); j++) {
switch (str.charAt(j)) {
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;
}
}
if (s.length() % 3 == 1) {
s = "00" + s;
} else if (s.length() % 3 == 2) {
s = "0" + s;
}
// System.out.println(s);
String ans = "";
for (k = 0; k < s.length() - 2; k += 3) {
String strr = s.substring(k, k + 3);
if (strr.equals("000")) {
ans += '0';
} else if (strr.equals("001")) {
ans += '1';
} else if (strr.equals("010")) {
ans += '2';
} else if (strr.equals("011")) {
ans += '3';
} else if (strr.equals("100")) {
ans += '4';
} else if (strr.equals("101")) {
ans += '5';
} else if (strr.equals("110")) {
ans += '6';
} else if (strr.equals("111")) {
ans += '7';
}
}
String ansString = ans;
for (k = 0; k < ans.length(); k++) {
if (ans.charAt(k) == '0') {
ansString = ans.substring(k + 1, ans.length());
} else {
break;
}
}
System.out.println(ansString);
}
}
}