面对高精度问题实质就是将实际位数的数的每一位数存进数组里进行运算.
面对十六转八进制的方法及通过二进制来过渡:
十六进制转二进制是1对4的:
例:十六进制数39就是将3和9分别转化成4为二进制数相加的00111001
二进制转八进制是3对1的:
例:二进制数00111001转化成八进制就是71
了解这些后高精度进制转换就结束了
代码实现:
#include <bits/stdc++.h>
using namespace std;
map <char, int> mp; //将字符与数字联系起来
int b[500005], c[300005];
int main() {
mp['A'] = 10;
mp['B'] = 11;
mp['C'] = 12;
mp['D'] = 13;
mp['E'] = 14;
mp['F'] = 15;
mp['0'] = 0;
mp['1'] = 1;
mp['2'] = 2;
mp['3'] = 3;
mp['4'] = 4;
mp['5'] = 5;
mp['6'] = 6;
mp['7'] = 7;
mp['8'] = 8;
mp['9'] = 9;
int n;
int o = 1;
string a;
cin >> n;
while (n--) {
cin >> a;
int l = a.length(), j = 0;
for (int i = 0; i < l; i++) {
int y = mp[a[i]];
b[j + 4] = y % 2;
b[j + 3] = y / 2 % 2; //十六转二进制(四位一组)
b[j + 2] = y / 2 / 2 % 2;
b[j + 1] = y / 2 / 2 / 2 % 2;
j += 4;
}
while (j > 0) {
if (j >= 2) {
c[o] = b[j] + (b[j - 1] * 2) + (b[j - 2] * 4);//二进制转八进制(三位一组)
} else
c[o] = b[j];
j -= 3;
o++;
}
o--;
if (c[o] == 0)
o--;
for (int m = o; m >= 1; m--) { //特判(首位为0情况)
cout << c[m];
}
cout << endl;
memset(c, 0, sizeof(c));
memset(b, 0, sizeof(b)); //重置数组(清空为0)
o = 1;
}
return 0;
}
如有问题请在评论区提出!