数十六進数から8進数に変換


説明:
問題の説明
n個の16進数の正の整数を与え、対応する8進数を出力する.
入力フォーマット
入力された第1の動作は正の整数n(1<=n<=10)である.
次のn行は、1行あたり0~9、大文字A~Fからなる文字列で、変換する16進数の正の整数を表し、各16進数の長さは100000を超えない.
出力フォーマット
n行を出力し、動作ごとに対応する8進正整数を入力します.
に注意
入力された16進数には、012 Aなどのプリアンブル0はありません.
出力される8進数にも先頭0はありません.
サンプル入力
2
39
123ABC
サンプル出力
71
4435274
#include"stdio.h"
#include"stdlib.h"


int zhuanhuan(short *b,char *c)
{
  long shiliu_to_shi(char ch);
short *temp;
temp=(short *)malloc(sizeof(short)*400000);//c[0]   ,    temo[0]   ,temp[0] temp[n]            
long long num=0;//    ch*      
int j=0;
long long temp_num=0;//           
          while((j=shiliu_to_shi(c[num]))>=0) 
          { //printf("j=%d ",j); 
		     int i;
              for(i=0;i<4;i++)
                { 
                  temp[temp_num+3-i]=(j>>i)&1;
	            }
	       temp_num=temp_num+4;
	       num++;
           }
           temp[temp_num]=-1; 
            //printf("j=%d  num=%d
temp_num=%d
",j,num,temp_num); num=0; //while(++num<=temp_num) // printf("%d",temp[num-1]); // printf("
"); num=0; b[num]=0; while(temp_num>0){ if(temp_num-3>=0) b[num]=temp[temp_num-3]*4; else b[num]=0; if(temp_num-2>=0) b[num]=b[num]+temp[temp_num-2]*2; if(temp_num-1>=0) b[num]=b[num]+temp[temp_num-1]; temp_num=temp_num-3; num++; } //printf("
b=
"); while(num-->0){ if(b[num]>0) break; } while(num>=0){ printf("%d",b[num]); num--; } printf("
"); return 1; } int shiliu_to_shi(char ch) { int temp=-2; if(ch<='9'&&ch>='1') temp=ch-'1'+1; else if(ch=='0') temp=0; else if(ch>='A'&&ch<='F') {temp=ch-'A'+10; } else if(ch=='\0') return -1; return temp; } int main() {int zhuanhuan(short *b,char *c); char *ch[10]; for(int i=0;i<10;i++) {ch[i]=(char *)malloc(sizeof(char)*100000); } long num=0,i,j; char c; short *b=(short *)malloc(sizeof(short)*200000); scanf("%d%c",&num,&c); for(i=0;i<num;i++) { scanf("%s%c",ch[i],&c); } for(i=0;i<num;i++) { zhuanhuan(b,ch[i]); // printf("
"); //puts(ch[i]); } return 0; }