思路:先把十六进制转化成二进制,在转换过程中,当二进制的位数为三的倍数时,将二进制转换为八进制,并动态增减二进制的位数
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n,i,j,k,m,temp,c,d,e;
char t;
cin>>n;
string *a=new string[n];
string *b=new string[n];
int ts[500005];
for(i=0;i<n;i++)
{
cin>>a[i];
m=0;
c=0;
d=0;
b[i]="";
for(j=a[i].size()-1;j>-1;j--)
{
if(a[i][j]>='0'&&a[i][j]<='9')
{
temp=a[i][j]-'0';
}
if(a[i][j]>='A'&&a[i][j]<='F')
{
temp=a[i][j]-'A'+10;
}
for(k=0;k<4;k++)
{
ts[m]=temp%2;
temp=temp/2;
m++;
}
while(c+2<m)
{
d=c;
t='0'+ts[d]+ts[d+1]*2+ts[d+2]*4;
if(!(c+3==m&&m==(a[i].size())*4-1&&t=='0'))
{
b[i]+=t;
}
c+=3;
}
if((a[i].size())*4-c-1==0)
{
t='0'+ts[c];
if(t!='0')
{
b[i]+=t;
}
}
else if((a[i].size())*4-c-1==1)
{
t='0'+ts[c]+ts[c+1]*2;
if(t!='0')
{
b[i]+=t;
}
}
}
}
for(i=0;i<n;i++)
{
reverse(b[i].begin(),b[i].end());
cout<<b[i]<<endl;
}
return 0;
}