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

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

  • 编辑器: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,其中 . 是不保留小数位

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。