首页 > 代码库 > 用栈实现2进制数到十进制数的转换

用栈实现2进制数到十进制数的转换

问题:用栈实现2进制数到十进制数的转换

解析:用到<math.h>库中的pow函数,pow(2,i)表示2^i。当进行形参到实参的传送时,需要改变栈中的元素时传入&s,当不改变栈中元素,只对栈s进行操作时,传入s

代码实现:

/*利用栈的特点将2进制数转换为10进制数 */ #include<stdio.h>#include<stdlib.h>#include<math.h>#define ElemType char#define Init_Stack_Size 30//当前栈的最大存储容量 #define IncreasmentSize 1 //每次增加的大小 typedef struct SqStack *LinkStack;typedef struct SqStack{	ElemType *base;	ElemType *top;	int initSize;}SqStack;//初始化栈void InitStack(SqStack *s){	s->base = (LinkStack)malloc(Init_Stack_Size * sizeof(ElemType));	if(!s->base)	{		printf("栈空间分配失败···\n");		exit(0);	}	s->top = s->base;	s->initSize = Init_Stack_Size;} //入栈操作void Push(SqStack *s,ElemType *e){	if((s->top - s->base) >= s->initSize - 1)	{		s->base = (LinkStack)realloc(s->base,(s->initSize + IncreasmentSize)*sizeof(ElemType));		if(!s->base)		{			exit(0);		} 		s->initSize = s->initSize + IncreasmentSize;	} 	*s->top = *e;	s->top++;} //出栈操作void Pop(SqStack *s,ElemType *e){	if(s->top == s->base)	{		return;	}	s->top--;	*e = *s->top;} //求栈的长度 int StackLen(SqStack *s){	return (s->top - s->base);} //2进制转换为10进制 void Bin2Dec(SqStack s){	int i,len;	long int sum = 0;	ElemType c,e;	InitStack(&s);	printf("请输入您要转换的二进制数,输入字符 ‘#‘结束:\n");	scanf("%c",&c);	while(c != ‘#‘)	{		Push(&s,&c);		scanf("%c",&c);	}	getchar();//必须要有一个getchar(),因为输入时要输入enter键表示输入完成,如果没有这一句,enter键将被当做字符‘\n‘输入,影响结果 	len = StackLen(&s);//	printf("%d\n",len);	for(i = 0;i < len;i++)	{		Pop(&s,&e);		sum = sum + (e-48) * pow(2,i);//这里要注意e是字符型的,0的ASCII码为48,1的ASCII码为49,要转换一下 才能进行运算 //		printf("%c",e);	}	printf("转换后的十进制数为:%ld\n",sum);}int main(){	int i,j;	SqStack s;	InitStack(&s);		Bin2Dec(s);	getch();	return 0;}

  

用栈实现2进制数到十进制数的转换