16进制转成2进制,2进制转成8
#include<iostream>
#include<string>
#include<vector>
using namespace std;
string get2(string& num)
{
int len = num.size();
string res = "";
for(int i = 0; i < len; i++)
{
switch(num[i])
{
case '0':res+="0000";break;
case '1':res+="0001";break;
case '2':res+="0010";break;
case '3':res+="0011";break;
case '4':res+="0100";break;
case '5':res+="0101";break;
case '6':res+="0110";break;
case '7':res+="0111";break;
case '8':res+="1000";break;
case '9':res+="1001";break;
case 'A':res+="1010";break;
case 'B':res+="1011";break;
case 'C':res+="1100";break;
case 'D':res+="1101";break;
case 'E':res+="1110";break;
case 'F':res+="1111";break;
}
}
return res;
}
string get8(string& num)
{
//长度能否被3整除,不能拿前面补0
if(num.size() % 3 == 1) num = "00" + num;
else if(num.size() % 3 == 2) num = "0" + num;
string res ="";
int len = num.size();
for(int i = 0; i < len; i += 3)
{
string temp = num.substr(i,3);
if(temp == "000")
{
if(res.size() != 0)
{
res += "0";
}
}
else if(temp == "001")
{
res += "1";
}
else if(temp == "010")
{
res += "2";
}
else if(temp == "011")
{
res += "3";
}
else if(temp == "100")
{
res += "4";
}
else if(temp == "101")
{
res += "5";
}
else if(temp == "110")
{
res += "6";
}
else if(temp == "111")
{
res += "7";
}
}
return res;
}
int main()
{
int n = 0;
cin>>n;
vector<string>nums(n);
for(int i = 0; i < n; i++)
{
cin>>nums[i];
}
for(int i = 0; i < n; i++)
{
string t = get2(nums[i]);
cout<<get8(t)<<endl;
}
return 0;
}