问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
我的代码:
#include
#include
#include
void main()
{
int n,num,k,sum;
int res[100]={0};
int j;//这个res[100]表示8进制数的数组序列
scanf("%d",&n);
getchar(); //如果用scanf后面一定要加一个getchar()来吸收回车字符
while(n--)
{
char str[10]={0}; //每次循环都应该初始化,而不仅仅是开头
gets(str);
sum=0; //同上
k=1;
//int res[100]={0};
for(int i=strlen(str)-1;i>=0;i--) //数组下标的最大值比它的长度小一
{
if(str[i]>='A' && str[i]<='F')
{
num=str[i]-'A'+10;
sum+=num*k;
k*=16;
}
if(str[i]>='0' && str[i]<='9')
{
num=str[i]-'0';
sum+=num*k;
k*=16;
}
}
//printf("%d\n",sum);//这是16进制转化为10进制的结果
j=0;
while(sum!=0)
{
res[j]=sum%8;
j++;
sum=sum/8;
}
for(int t=j-1;t>=0;t--)
printf("%d",res[t]);
printf("\n");
}
}