题目链接:http://lx.lanqiao.cn/problem.page?gpid=T51
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
const char HEX[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
const string hexBinary[16] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
const string octonaryBinary[8] = {"000", "001", "010", "011", "100", "101", "110", "111"};
string toString(int num) {
string res = "";
while (num > 0) {
res += (num % 10) + '0';
num /= 10;
}
reverse(res.begin(), res.end());
return res;
}
string hexToBinary(string hex) {
string res = "";
for (int i = 0; i < hex.length(); i++) {
for (int j = 0; j < 16; j++) {
if (hex[i] == HEX[j]) {
res += hexBinary[j];
break;
}
}
}
return res;
}
string binaryToOctonary(string binary) {
int len = binary.length();
if (len % 3) {
reverse(binary.begin(), binary.end());
for (int i = 0; i < 3 - (len % 3); i++) {
binary += '0';
}
reverse(binary.begin(), binary.end());
}
string res = "";
string son = "";
int head = 0;
for (int i = 0; i < binary.length() / 3; i++) {
son = binary.substr(head, 3);
for (int j = 0; j < 8; j++) {
if (son == octonaryBinary[j]) {
res += HEX[j];
break;
}
}
head += 3;
}
while (*res.begin() == '0') {
res.erase(res.begin());
}
return res;
}
int main () {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string hex;
cin >> hex;
cout << binaryToOctonary(hexToBinary(hex)) << "\n";
}
return 0;
}