用栈实现进制转换,
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define stackinitsize 20
#define stacksizecrise 10
typedef struct {
char *top;
char *base;
int stacksize;
}sqstack;
void initstack(sqstack *s)
{
s->base=(char*)malloc(stackinitsize*sizeof(char));
if(!s)
{
exit(0);
}
s->base=s->top;
s->stacksize=stackinitsize;
}
void push(sqstack *s,char e)
{
if(s->top-s->base>=s->stacksize)
{
// s->base=(char*)realloc(s->base,(s->stacksize+stacksizecrise)*sizeof(char));
s->base=(char*)realloc(s->base,(s->stacksize+stacksizecrise)*sizeof(char));
s->top=s->base+s->stacksize;
s->stacksize=s->stacksize+stacksizecrise;
}
*(s->top)=e;
s->top++;
}
void pop(sqstack *s,char *e)
{
if(s->base==s->top)
return ;
*e=*--(s->top);
}
int stacklen(sqstack s)//不需要更改s的结构
{
return (s.top-s.base);
}
int main()
{
int len,i,sum=0;
sqstack s;
char c;
initstack(&s);
printf("please input the bin numbers and end with'#'\n");
scanf("%c",&c);
while(c!='#')
{
push(&s,c);
scanf("%c",&c);
}
getchar();
len=stacklen(s);
for(i=0;i<len;i++)
{
pop(&s,&c);
sum=sum+(c-48)*pow(2,i);//c-48是因为传入的时候是以字符形式传入 所以-48可以转化为数字
}
printf("The result is %d",sum);
}