蓝桥杯基础练习题3(16进制转8进制)1

蓝桥杯基础练习题3(16进制转8进制)1

系统显示测试超时。。。尴尬

#include<cstdio>
#include<iostream>
#include<cstring>
#include<math.h>
using namespace std;

int num[400005],num_o[400005];
char num_x[100005];
int main()
{
    memset(num,0,sizeof(num));
    int n,i,j,len;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%s",num_x);
        len=strlen(num_x);

        int t=len*4-1;
        int p=0;
        for(j=0; j<len; j++)
        {
            int xx;
            if(num_x[j]>='A'&&num_x[j]<='F')
            {        
                xx=num_x[j]-'A'+10;
            }
            else
                xx=num_x[j]-'0';
            //          printf("%d
",xx);
            int res[10]= {0},s=4;
            while(xx)
            {
                res[s++]=(xx&1);
                xx>>=1;
            }
            s=4;
            for(int rr=t-3; rr<=t; rr++)
            {
                num[rr]=res[s++];
            }
            t-=4;
        }
  /*      for(int jj=0; jj<len*4; jj++)
        {
            printf("%d",num[jj]);
        }
        puts("");*/
        int tmp=0;
        for(int k=0; k<=len*4+3; k++)
        {
            //
            if(k%3==0&&k!=0)
            {
                num_o[p++]=tmp;
                tmp=0;
            }
            if(num[k]) tmp+=1<<(k%3);

        }
//        puts("");
        int pp=1;
        for(i=p-1; i>=0; i--)
        {
            if(pp&&num_o[i]!=0)
            {
                pp=0;
                printf("%d",num_o[i]);
            }
            else if(!pp)
            {
                printf("%d",num_o[i]);
            }
        }
        printf("
");
    }
    return 0;
}