Arbitrary007
2021-01-14 13:09
采纳率: 66.7%
浏览 18

请问一下我写的这串进制转换的代码错误的地方在哪?

  • 编辑器:VC++ 6.0
  • 题目:从键盘输入一串字符串,第一个字符是‘2’或者‘8’,第二个字符是‘#’,接着后面是一个二进制串或八进制串,最后以‘¥’结尾。输出相对应的十进制数。如输入:2#1101$ 输出结果:13    输入:8#12$ 输出结果:10
  • 我的代码:
  • #include<stdio.h>
  • #include<string.h>
  • #include<math.h>
  • void main()
  • {
  •      char ch[100];
  •      int a[100],k=0;
  •      int n;
  •      double sum=0,x=0;
  •      puts("please inputs characters:");
  •      gets(ch);            //输入2#1101¥  8#12¥
  •      n=strlen(ch);        //n为字符串长度 
  •      if(ch[0]=='2')
  •      {
  •         for(int i=n-2;i<=2;i--)   //i从¥前一个元素开始,例如2#1101¥从末尾1开始到第一个1结束
  •         {
  •             switch(ch[i])
  •             {
  •             case '0':a[k]=0;break;
  •             case '1':a[k]=1;break;
  •             }
  •             sum+=(a[k]*pow(2,x));      //sum=1×2^0+1×2^2+1×2^3
  •             x++;
  •             k++;
  •             continue;
  •         }
  •         printf("%d\n",sum);
  •      }
  •      else if(ch[0]=='8')
  •      {
  •          for(int j=n-3;j<=2;j--)
  •          {
  •              switch(ch[j])
  •              {
  •              case '0':a[k]=0;break;
  •              case '1':a[k]=1;break;
  •              case '2':a[k]=2;break;
  •              case '3':a[k]=3;break;
  •              case '4':a[k]=4;break;
  •              case '5':a[k]=5;break;
  •              case '6':a[k]=6;break;
  •              case '7':a[k]=7;break;
  •              }
  •              sum+=(a[k]*pow(8,x));
  •              x++;
  •              k++;
  •              continue;
  •          }
  •          printf("%d\n",sum);
  •      }
  • }
  • 无论我输入什么,结果都是输出0,如图:
  • 调试结果:
  • 谢谢大家能帮忙看一看问题出在哪。

 

 

 

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qq_25376897 2021-01-14 15:22
    已采纳

    写代码还是细心,写完多检查

    1、for(int i=n-2;i<=2;i--)   改为  for(int i=n-4;i>=2;i--) 

    for(int j=n-3;j<=2;j--) 改为 for(int j=n-4;j>=2;j--)    ’

    另外取决于你是用¥还是用$,一个是中文的,一个是英文的,中文占3个字节(UTF8编码下的,其他编码下占的字节数不一定是3),英文占1个字节,¥就是n-4,$是n-2,所以最好还是用$,不会受编码的影响

    2、printf("%d\n",sum); 改成 printf("%.lf\n",sum);   sum是double类型的,所以用%.lf,其中 . 是不保留小数位

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • bekote 2021-01-14 15:20

    for(int i=n-2;i<=2;i--)        i>=2

    for(int j=n-3;j<=2;j--)        j>=2

     

    评论
    解决 无用
    打赏 举报
  • Arbitrary007 2021-01-14 16:21

    谢谢大家热情帮助,已经懂了,数据类型转化这个地方导致数据丢失,还有循环这个地方的大于小于搞反了,感谢感谢~~~

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题