岚朋友


私信TA

用户名:a475308928

访问量:1607

签 名:

等  级
排  名 78
经  验 9662
参赛次数 0
文章发表 11
年  龄 0
在职情况 学生
学  校 ???
专  业 软件工程

  自我简介:

解题思路:先转换成2进制在转换成8进制

注意事项:不要用%c单个存,直接存一行,不然会超时。

参考代码:

#include<stdio.h>
main()
{ int i,j,n,k;
  scanf("%d%*c",&n);
  while(n--)
  { char a[400032]={},b[140032]={},c[100032]={};

   //c用于存16进制//b用于存8进制//a用于存2进制

    scanf("%s",c);//转二进制
    for(i=0,j=3;c[i];i++)
    { if(c[i]<=90&&c[i]>=65)c[i]-=55;
      else if(c[i]>=48&&c[i]<=57)c[i]-=48;
      for(k=4;k--;c[i]/=2)a[j--]=c[i]%2;//倒着存
      j+=8;
    }//j在出循环的时候会比存的数多3,所以实际位数为j-3;
    for(i=j-4,k=0;i>=0;i-=3,k++)
    { if(i-2>=0)b[k]=a[i]+a[i-1]*2+a[i-2]*4;
      else if(i-1>=0)b[k]=a[i]+a[i-1]*2;
      else b[k]=a[i];
    }
    for(i=k-1;1;i--)if(b[i]!=0)break;//去多余的0;
    for(;i>=0;i--)printf("%d",b[i]);
    printf("\n");
  }
}

 

0.0分

7 人评分

  评论区

  • «
  • »