(数据很大)因此直接考虑用字符串数组来储存十六进制和八进制
先根据“四位一体‘’的方法将十六进制转化为二进制,而后根据“三位一体”将二进制转化为八进制。
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
char a[100001];
char b[400004];
char c[200000];
char d[400004];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
scanf("%s",&a);
int len=strlen(a);
int i;
int k=0;
for(i=0;i<len;i++)
{
if(a[i]=='0')
{
b[k++]='0';
b[k++]='0';
b[k++]='0';
b[k++]='0';
}
else if(a[i]=='1')
{
b[k++]='0';
b[k++]='0';
b[k++]='0';
b[k++]='1';
}
else if(a[i]=='2')
{
b[k++]='0';
b[k++]='0';
b[k++]='1';
b[k++]='0';
}
else if(a[i]=='3')
{
b[k++]='0';
b[k++]='0';
b[k++]='1';
b[k++]='1';
}
else if(a[i]=='4')
{
b[k++]='0';
b[k++]='1';
b[k++]='0';
b[k++]='0';
}
else if(a[i]=='5')
{
b[k++]='0';
b[k++]='1';
b[k++]='0';
b[k++]='1';
}
else if(a[i]=='6')
{
b[k++]='0';
b[k++]='1';
b[k++]='1';
b[k++]='0';
}
else if(a[i]=='7')
{
b[k++]='0';
b[k++]='1';
b[k++]='1';
b[k++]='1';
}
else if(a[i]=='8')
{
b[k++]='1';
b[k++]='0';
b[k++]='0';
b[k++]='0';
}
else if(a[i]=='9')
{
b[k++]='1';
b[k++]='0';
b[k++]='0';
b[k++]='1';
}
else if(a[i]=='A')
{
b[k++]='1';
b[k++]='0';
b[k++]='1';
b[k++]='0';
}
else if(a[i]=='B')
{
b[k++]='1';
b[k++]='0';
b[k++]='1';
b[k++]='1';
}
else if(a[i]=='C')
{
b[k++]='1';
b[k++]='1';
b[k++]='0';
b[k++]='0';
}
else if(a[i]=='D')
{
b[k++]='1';
b[k++]='1';
b[k++]='0';
b[k++]='1';
}
else if(a[i]=='E')
{
b[k++]='1';
b[k++]='1';
b[k++]='1';
b[k++]='0';
}
else if(a[i]=='F')
{
b[k++]='1';
b[k++]='1';
b[k++]='1';
b[k++]='1';
}
}
int flag=0;
while(k%3!=0)
{
flag+=1;
k++;
}
int flag1=flag;
for(i=0;i<k;i++)
{
if(flag!=0)
{
d[i]='0';
flag--;
}
else
d[i]=b[i-flag1];
}
int len2=k/3;
int j=0;
for(i=0;i<=len2;i++)
{
if(d[j]=='0'&&d[j+1]=='0'&&d[j+2]=='0')
c[i]='0';
else if(d[j]=='0'&&d[j+1]=='0'&&d[j+2]=='1')
c[i]='1';
else if(d[j]=='0'&&d[j+1]=='1'&&d[j+2]=='0')
c[i]='2';
else if(d[j]=='0'&&d[j+1]=='1'&&d[j+2]=='1')
c[i]='3';
else if(d[j]=='1'&&d[j+1]=='0'&&d[j+2]=='0')
c[i]='4';
else if(d[j]=='1'&&d[j+1]=='0'&&d[j+2]=='1')
c[i]='5';
else if(d[j]=='1'&&d[j+1]=='1'&&d[j+2]=='0')
c[i]='6';
else if(d[j]=='1'&&d[j+1]=='1'&&d[j+2]=='1')
c[i]='7';
j+=3;
}
int flag2=0;
for(i=0;i<=len2;i++){
if(flag2==0&&c[i]=='0')
flag2=1;
else{
printf("%c",c[i]);
flag2=1;}
}
printf("\n");
}
return 0;
}```