注意:先将十六进制数转换成某进制
#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct Shiliu{
char s[1000001] ;
};
typedef struct Shiliu shiliu ;
struct Ba{
char s[1000001] ;
};
typedef struct Ba ba ;
struct Er{
char s[4000001] ;
};
typedef struct Er er ;
int main()
{
int n ;
scanf("%d",&n) ;
shiliu* a = (shiliu*)malloc(n*sizeof(shiliu)) ;
ba* c = (ba*)malloc(sizeof(ba)) ;
er* b = (er*)malloc(sizeof(er)) ;
for(int i=0;i<n;++i)
scanf("%s",a[i].s) ;
int number = 0 ;
for(int i=0;i<n;++i)
{
number = 0 ;
for(int j=0;a[i].s[j]!='\0';++j)
{
switch(a[i].s[j])
{
case '0':
b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';
break ;
case '1':
b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';
break ;
case '2':
b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';
break ;
case '3':
b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';
break ;
case '4':
b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';
break ;
case '5':
b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';
break ;
case '6':
b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';
break ;
case '7':
b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';
break ;
case '8':
b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';
break ;
case '9':
b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';
break ;
case 'A':
b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';
break ;
case 'B':
b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';
break ;
case 'C':
b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';
break ;
case 'D':
b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';
break ;
case 'E':
b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';
break ;
case 'F':
b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';
break ;
}
b->s[number]='\0' ;
}
number = 0 ;
int sum = strlen(b->s) ;
int j ;
if(sum%3==0)
j = 0 ;
else if(sum%3==1)
j = -2 ;
else
j = -1 ;
while(j<sum)
{
char temp[4] ;
if(j==-2)
{
temp[0]='0';temp[1]='0'; j=0; temp[2]=b->s[j++] ; temp[3]='\0' ;
}
else if(j==-1)
{
temp[0]='0'; j=0; temp[1]=b->s[j++]; temp[2]=b->s[j++] ; temp[3]='\0' ;
}
else
{
temp[0]=b->s[j++];temp[1]=b->s[j++];temp[2]=b->s[j++];temp[3]='\0';
}
if(strcmp(temp,"000")==0)
c->s[number++]='0';
else if(strcmp(temp,"001")==0)
c->s[number++]='1';
else if(strcmp(temp,"010")==0)
c->s[number++]='2';
else if(strcmp(temp,"011")==0)
c->s[number++]='3';
else if(strcmp(temp,"100")==0)
c->s[number++]='4';
else if(strcmp(temp,"101")==0)
c->s[number++]='5';
else if(strcmp(temp,"110")==0)
c->s[number++]='6';
else if(strcmp(temp,"111")==0)
c->s[number++]='7';
c->s[number]='\0' ;
}
int sign = 0 ;
for(int k=0;;++k)
{
if(c->s[k]!='0')
{
sign = k ; break ;
}
}
for(int k=sign;c->s[k]!=';
printf("\n") ;
b->s[0]='\0' ; c->s[0]='\0' ;
}
free(c) ; free(b)\0';++k)
printf("%c",c->s[k]) ;
return 0 ;
}
数,再由某进制数转换成八进制。