Я столкнулся с проблемой, когда решил проблему с алгоритмом в java. алгоритм выглядит следующим образом:
Описание проблемы:
Если дано n шестнадцатеричных положительных целых чисел, выведите их восьмеричные числа
Формат ввода:
первое действие ввода - положительное целое число n (1 <= n <= 10) следующие n строк, каждая строка состоит из строки от 0 до 9 в верхнем регистре, буквы A ~ F, представляющие шестнадцатеричные положительные целые числа для преобразования, каждое шестнадцатеричное число длиной не более 100 000 </p>
Формат вывода
Вывести n строк, в каждой строке ввести восьмеричное положительное целое число.
【note】
Введенное вами шестнадцатеричное число не имеет начального 0, например 012A , Выходное восьмеричное число не должно начинаться с 0
Пример ввода:
2
39
123AB C
Пример вывода:
71
4435274
мое решение ниже:
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
String[] hexMapping = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
};
Map<String,String> octMapping = new HashMap<>();
octMapping.put("000","0");
octMapping.put("001","1");
octMapping.put("010","2");
octMapping.put("011","3");
octMapping.put("100","4");
octMapping.put("101","5");
octMapping.put("110","6");
octMapping.put("111","7");
String hexString = "";
StringBuilder hex2Bin = new StringBuilder("");
StringBuilder bin2Oct = new StringBuilder("");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
// consuming the <enter> from input above
input.nextLine();
for (int i = 0; i < n; i++) {
hexString = input.nextLine();
// hex to bin
int hexLen = hexString.length();
for (int j = 0; j < hexLen; j++) {
if (hexString.charAt(j)>'9') {
hex2Bin.append(hexMapping[hexString.charAt(j)-'A'+10]);
} else {
hex2Bin.append(hexMapping[hexString.charAt(j)-'0']);
}
} //end for
// add "00" or "0"
int len = hex2Bin.length();
if (len % 3 == 1) {
hex2Bin.insert(0,"00");
} else if (len % 3 == 2) {
hex2Bin.insert(0,"0");
}
// bin to oct
int newLen = hex2Bin.length();
String temp = "";
for (int j = 0; j < newLen; j+=3 ) {
temp = octMapping.get(hex2Bin.substring(j,j+3));
if (temp.equals("0")) {
continue;
}
bin2Oct.append(temp);
} //end for
System.out.println(bin2Oct);
}//end for
input.close();
}
при вводе:
1
39
или
1
123AB C
оба значения верны.
но при вводе:
2
39
123AB C
Я не могу получить правильный ответ.
Я думаю, что причиной является вход, когда я использую сканер в для l oop, я не знаю, как решить эту проблему, подскажите?