QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
14
查看: 239|回复: 1

[已解决]用栈的方法把二进制转化为八进制

[复制链接]
最佳答案
0 
累计签到:6 天
连续签到:1 天
Evolution.Era 发表于 2017-10-11 17:47:22 2391 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>

  4. #define STACKINITSIZE 20
  5. #define STACKADD 10
  6. typedef char ElemType;
  7. typedef struct
  8. {
  9.         ElemType *base;
  10.         ElemType *top;
  11.         int stackSize;
  12. }sqStack;

  13. void InitStack(sqStack *s)
  14. {
  15.         s->base=(ElemType *)malloc((STACKINITSIZE)*sizeof(ElemType));
  16.         if(!s->base)
  17.         {
  18.                 exit(0);
  19.         }
  20.         s->top=s->base;
  21.         s->stackSize=STACKINITSIZE;
  22. }

  23. void Push(sqStack *s,ElemType e)
  24. {
  25.         if(s->top-s->base>=s->stackSize)
  26.         {
  27.                 s->base=(ElemType *)realloc(s->base,(s->stackSize+STACKADD)*sizeof(ElemType));
  28.                 if(!s->base)
  29.                 {
  30.                         exit(0);
  31.                 }
  32.                 s->top=s->base+s->stackSize;
  33.                 s->stackSize=s->stackSize+STACKADD;
  34.         }
  35.         *(s->top)=e;
  36.         s->top++;
  37. }

  38. void Pop(sqStack *s,ElemType *e)
  39. {
  40.         if(s->base==s->top)
  41.         {
  42.                 return;
  43.         }
  44.         *e=*--(s->top);
  45. }

  46. int Stacklen(sqStack s)
  47. {
  48.         return(s.top-s.base);
  49. }

  50. main (void)
  51. {
  52.         sqStack s1,s2;
  53.         ElemType ch;
  54.         InitStack(&s1);

  55.         printf("请输入二进制数,输入#结束:");
  56.         scanf("%c",&ch);
  57.         while(ch!='#')
  58.         {
  59.                 Push(&s1,ch);
  60.                 scanf("%c",&ch);
  61.         }
  62.         getchar();
  63.         int i,j,len,sum=0;
  64.         len=Stacklen(s1);
  65.         for(i=0;i<len;i+3)
  66.         {
  67.                 sum=0;
  68.                 for(j=0;j<3;j++)
  69.                 {
  70.                         Pop(&s1,&ch);
  71.                         sum=sum+(ch-'0')*pow(2,j);
  72.                         if(s1.base==s1.top) break;
  73.                 }
  74.                 Push(&s2,sum+'0');
  75.         }
  76.                 InitStack(&s2);
  77.         printf("转换为八进制为:");       
  78.         while(s2.base!=s2.top)
  79.         {
  80.                 Pop(&s2,&ch);
  81.                 printf("%c",ch);
  82.         }

  83.         return 0;
  84. }
复制代码


不知道错哪里了,总是运行不了,谁有空可以帮我看看吗
最佳答案
2017-10-20 12:58:41
两个错误

1、main(void), 应该改成int main(void)这种形式
2、你用的是什么编译器或软件?
如果用的linux下编译的话,需要加-lm选项,如:gcc -stack.c -o exe -lm
可以推荐vc++ 6.0开发环境编译应该是没有问题的
楼层
跳转到指定楼层
最佳答案
19 
累计签到:43 天
连续签到:13 天
weizhongyang 发表于 2017-10-20 12:58:41 | 显示全部楼层    本楼为最佳答案   
两个错误

1、main(void), 应该改成int main(void)这种形式
2、你用的是什么编译器或软件?
如果用的linux下编译的话,需要加-lm选项,如:gcc -stack.c -o exe -lm
可以推荐vc++ 6.0开发环境编译应该是没有问题的

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /2 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-12-17 16:11

快速回复 返回顶部 返回列表