#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
/*注意编译时命令为 gcc stank.c -lm加上编译的时候链接数学库*/
typedef char ElemType ;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
void initStack(sqStack *s);
void Push(sqStack *s,ElemType e);
void Pop(sqStack *s,ElemType *e);
void DestroyStack(sqStack *s);
int StackLen(sqStack *s);
int main()
{
sqStack stack,*S ;//注意要有实体不能用指针直接来
S = &stack;
initStack(S);
int len;
int i;
int sum = 0;//不初始化既然有奇怪的结果,醉了
char c;
scanf("%c",&c);
while(c != '#')
{
Push(S,c);
scanf("%c",&c);
}
getchar();//把回车从键盘缓冲区拿出
len = StackLen(S);
// printf("%d\n",len);
do
{
for(i = 0;i < (len/4?4:len%4);i++)
{
Pop(S,&c);
sum = sum + (c - 48)*pow(2,i);
// printf("%d-%c-%d\n",sum,c,i);
}
printf("%d\n",sum);
sum = 0;
len = len - 4;
// printf("%d->\n",len);
if(len < 0)
{
len = 0;
}
}while(len);
printf("其实这里也应该用个栈来存十六进制的数\n偷懒了从下面往上读吧^_^");
return 0;
}
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 = (ElemType*)realloc(s->base,(s->stackSize+STACKINCREMENT)*sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->top = s->base + s->stackSize;
s->stackSize = s->stackSize + STACKINCREMENT;
}
(*s->top) = e;
s->top++;
}
void Pop(sqStack *s,ElemType *e)
{
if(s->top == s->base)
{
*e = '0';
return ;
}
*e = *(--(s->top));
// printf("%d",*(s->top-1));
// s->top--;
}
//有问题
void DestroyStack(sqStack *s)
{
int i,len;
len = s->stackSize;
// len = 2;
for(i=0;i < len;i++)
{
free(s->base);
s->base++;
}
s->base = s->top = NULL;
s->stackSize = 0;
}
int StackLen(sqStack *s)
{
return (s->top-s->base);
}
BintoHex二进制到十六进制(栈)
最新推荐文章于 2022-10-26 12:44:39 发布