数十六進数から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
問題の説明
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;
}