借鉴自:https://blog.csdn.net/deadline_1/article/details/54866270
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n=0;
cin >> n;
string hex[10];
for(int i=0;i<n;i++)
{
cin >> hex[i];
}
for (int i = 0; i < n; i++)
{
string eight;
char eig;
string tow;
for (int j = 0; j < hex[i].length(); j++)
{
if (hex[i][j] <= '9')
{
int now = hex[i][j]-'0';
eig = now / 8 + '0';
tow = tow + eig;
eig = now % 8 / 4 + '0';
tow = tow + eig;
eig = now % 4 / 2 + '0';
tow = tow + eig;
eig = now % 2 + '0';
tow = tow + eig;
}
else
{
int now = hex[i][j]-'A'+10;
eig = now / 8 + '0';
tow = tow + eig;
eig = now % 8 / 4 + '0';
tow = tow + eig;
eig = now % 4 / 2+'0';
tow = tow + eig;
eig = now % 2+'0';
tow = tow + eig;
}
}
int m = tow.length() % 3;
if (m == 1)
{
tow.insert(0,"00");
}
if (m == 2)
{
tow.insert(0, "0");
}
for (int k = 0; k < tow.length() / 3; k++)
{
eig = (tow[k*3] - '0') * 4 + (tow[k*3 + 1] - '0') * 2 + (tow[k*3 + 2]);
eight = eight + eig;
}
if (eight[0] = '0')
{
for (int i = 1; i < eight.length(); i++)
{
cout << eight[i];
}
}
cout << endl;
}
system("pause");
return 0;
}
---------------枚举法----------
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n=0;
cin >> n;
string hex[10];
for(int i=0;i<n;i++)
{
cin >> hex[i];
}
for (int i = 0; i < n; i++)
{
string eight;
char eig;
string tow;
for (int j = 0; j < hex[i].length(); j++)
{
switch (hex[i][j])
{
case '0':tow += "0000"; break;
case '1':tow += "0001"; break;
case '2':tow += "0010"; break;
case '3':tow += "0011"; break;
case '4':tow += "0100"; break;
case '5':tow += "0101"; break;
case '6':tow += "0110"; break;
case '7':tow += "0111"; break;
case '8':tow += "1000"; break;
case '9':tow += "1001"; break;
case 'A':tow += "1010"; break;
case 'B':tow += "1011"; break;
case 'C':tow += "1100"; break;
case 'D':tow += "1101"; break;
case 'E':tow += "1110"; break;
case 'F':tow += "1111"; break;
default:
break;
}
}
int m = tow.length() % 3;
if (m == 1)
{
tow.insert(0,"00");
}
if (m == 2)
{
tow.insert(0, "0");
}
if (!(tow[0] == '0'&&tow[1] == '0'&&tow[2] == '0'))
{
eig = (tow[0] - '0') * 4 + (tow[1] - '0') * 2 + (tow[2]);
eight = eight + eig;
}
for (int k = 3; k < tow.length() / 3; k=k+3)
{
if (tow.substr(k, 3) == "000")
eight += "0";
else if (tow.substr(k, 3) == "001")
eight += "1";
else if (tow.substr(k, 3) == "010")
eight += "2";
else if (tow.substr(k, 3) == "011")
eight += "3";
else if (tow.substr(k, 3) == "100")
eight += "4";
else if (tow.substr(k, 3) == "101")
eight += "5";
else if (tow.substr(k, 3) == "110")
eight += "6";
else if (tow.substr(k, 3) == "111")
eight += "7";
}
cout << eight<<endl;
}
system("pause");
return 0;
}