思路:16进制先转成2进制,再转成8进制
代码`
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
char s[100007];
char s2[400007];
int main()
{
int n;scanf("%d",&n);
while(n--)
{
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++)
{
int num=0;
if(isdigit(s[i])) num=s[i]-'0';
else num=s[i]-'A'+10;
if(num&8)s2[4*i+0]='1';
else s2[4*i+0]='0';
if(num&4)s2[4*i+1]='1';
else s2[4*i+1]='0';
if(num&2)s2[4*i+2]='1';
else s2[4*i+2]='0';
if(num&1)s2[4*i+3]='1';
else s2[4*i+3]='0';
}
//for(int i=0;i<4*len;i++)printf("%c",s2[i]);printf("\n");
int ls2=4*len;
int t=ls2%3;
int ans=0;
for(int i=0;i<t;i++)
{
ans<<=1;
ans+=(s2[i]-'0');
}
if(ans)printf("%d",ans);
ans=0;
for(int i=t;i<ls2;i++)
{
ans<<=1;
ans+=(s2[i]-'0');
if((i-t)%3==2)
{
printf("%d",ans);
ans=0;
}
}
printf("\n");
}
return 0;
}