wd_hudiekou 2016-09-17 06:03 采纳率: 0%
浏览 3691

C语言要求将16进制数转换为8进制数,编写了代码,但是不能按题目要求输入输出,请大神帮忙解答,谢谢!

问题描述
  给定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");    
  }

}

  • 写回答

3条回答

  • arthurlee 2016-09-17 06:34
    关注

    算法没有大问题,str的大小给的有些小了。scanf足够聪明。

    修改如下:
    1. 删除getchar();这一行
    2. gets(str);这一行修改成scanf("%s", str);就可以了

    测试通过。

    评论

报告相同问题?

悬赏问题

  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程