思路:先将16进制数转换成10进制,再将10进制转换成8进制
#include <stdio.h>
int charAt(char* str,char ch)
{
int i;
for(i=0;i<strlen(str);++i)
{
if(*(str+i)==ch)
{
return i;
}
}
return -1;
}
int hex2num(char *hNum)
{
char *hex="0123456789ABCDEF";
int dNum=0;
int len=strlen(hNum);
int i;
for(i=0;i<len-1;++i)
{
int pos=charAt(hex,*(hNum+i));
dNum+=pos*pow(16,len-i-1);
}
dNum+=charAt(hex,*(hNum+len-1));
return dNum;
}
int main(void)
{
int n;
char hNums[10][6];
char octs[10];
int i;
scanf("%d",&n);
for(i=0;i<n;++i)
{
scanf("%s",hNums[i]);
}
for(i=0;i<n;++i)
{
sprintf(octs,"%o",hex2num(hNums[i]));
printf("%s\n",octs);
}
return 0;
}