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);就可以了

    测试通过。

    评论

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样