题意:把高精度十六进制数转换为八进制数
思路:以二进制位桥梁
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#define maxSize 10005
int CharToInt(char c){
if (c >= '0' && c <= '9')
return c - '0';
else
return c - 'A' + 10;
}
void trans(string a){
char c[maxSize];
int temp, m, k = 0;
memset(c, 0, sizeof(c));
//以二进制为过渡【4位表示1位16进制数】
for (int i = a.size() - 1; i >= 0; i--){
temp = CharToInt(a[i]);
for (int j = 0; j < 4; j++, k++){
c[k] = temp % 2 + '0';
temp /= 2;
}
}
//八进制【3位表1位】
while (strlen(c) % 3 != 0){//高位补零使成为3的倍数
c[k] = '0';
k++;
}
int i = strlen(c);//二进制数长度
do{//消去前导零
i -= 3;
m = c[i] - '0' + (c[i + 1] - '0') * 2 + (c[i + 2] - '0') * 4;
} while (m == 0);
for (; i >= 0; i -= 3){//逐位输出八进制数
m = c[i] - '0' + (c[i + 1] - '0') * 2 + (c[i + 2] - '0') * 4;
cout << m;
}
}
int main(){
int n;
string a;
cin >> n;
while (n--){
cin >> a;
trans(a);
cout << endl;
}
return 0;
}