|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我昨天晚上看了小甲鱼的用栈实现二进制转十进制,然后留给我们的作业是二进制转八进制和十六进制,昨天编了我好久,都没编成功,昨天睡觉前整理了一下思路,今天早上编成功的,这次是自己编的啊,就是栈的部分是参考小甲鱼视频里的,由于那堂课的源代码要30鱼币,好贵的,只好自己苦命的编了。求大神指导。
- #include<stdio.h>
- #include<stdlib.h>
- #include<math.h>
- #define STACK_INIT_SIZE 20
- #define STACKICREAMENT 10
- typedef char ElemType;
- typedef struct
- {
- ElemType *top;
- ElemType *base;
- int stacksize;
- }sqStack;
- void Initstack(sqStack *s)
- {
- s->base=(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType) );
- if(!s->base)
- {
- exit(0);
- }
- s->top=s->base;
- s->stacksize=STACK_INIT_SIZE;
- }
- void Push(sqStack *s, ElemType e)
- {
- if(s->top - s->base >= s->stacksize)
- {
- s->base=realloc(s->base, (s->stacksize + STACKICREAMENT ) * sizeof(ElemType) );
- if(!s->base)
- {
- exit(0);
- }
- }
- *(s->top)=e;
- s->top++;
- }
- void Pop(sqStack *s, ElemType *e)
- {
- if(s->top==s->base)
- {
- return;
- }
- *e= *--(s->top);
- }
- int Stacksize(sqStack s)
- {
- return (s.top - s.base);
- }
- int main()
- {
- int i,j,k,a,len,len1,len2,sum1=0,sum2=0;
- ElemType e,sum;
- sqStack s1,s2;
- Initstack(&s1);
- Initstack(&s2);
- printf("请输入二进制数,以#结束\n");
- scanf("%c",&e);
- while(e!='#')
- {
- Push(&s1,e);
- scanf("%c",&e);
- }
-
- getchar();
-
- len1=Stacksize(s1);
- printf("该栈的容量为%d\n",len1);
- len=len1;
- while(len % 3 != 0)
- {
- len++;
- }
- for(i=0; i< len /3; i++)
- {
-
- a=3;
- if(i == len /3 - 1 && len != len1)
- {
- a= len1 % 3;
- }
- for(j=0; j<a; j++)
- {
- Pop(&s1,&e);
- sum1=sum1+(e-48)*pow(2,j);
- }
- sum=sum1+48;
- sum1=0;
- Push(&s2,sum);
- }
-
- len2=Stacksize(s2);
- printf("转换为八进制为:");
- for(k=0; k<len2 ;k++)
- {
- Pop(&s2,&sum);
- printf("%c",sum);
- }
-
- return 0;
- }
复制代码 |
|