C语言编程,将十六进制转换为八进制,大体思想就是先将十六进制转换为十进制,再转换为八进制,但是程序运行结果有误,请各位大神帮帮忙,看看我的代码错在哪里?谢谢了!
问题描述给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
我的代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
char str[10];
int n,num,k=1,sum=0;
int sh,res[100],j=0;//这个res[100]表示8进制数的数组序列
scanf("%d",&n);
while(n--)
{
gets(str);
for(int i=strlen(str);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进制的结果
sh=sum/8;//这里的sh表示商
while(sh!=0)
{
res[j]=sum%8;
j++;
sum=sh;
sh=sum/8;
}
printf("%d",sum);
for(int t=j;t>=0;t--)
printf("%d",res[t]);
}
}