二进制转化十进制(栈的应用)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef char ElemType;
typedef struct
{
	ElemType *base;
	ElemType *top;
	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 = (ElemType *)realloc(s->base,(s->StackSize + STACKINCREMENT) * 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 StackLen(sqStack s)
{
	return (s.top - s.base);
}

int main()
{
	ElemType c;
	sqStack s;
	int len,i,sum = 0;
	
	InitStack(&s);
	
	printf("输入二进制数,以!为结尾标志:");
	scanf("%c",&c);
	while(c!='!')
	{
		Push(&s,c);
		scanf("%c",&c);
	}
	
	
	len = StackLen(s);
	
	printf("栈的当前容量是%d\n",len);
	
	for(i = 0;i < len;i++)
	{
		Pop(&s,&c);
		sum = sum + (c-48) * pow(2,i);//pow函数 
	} 
	
	printf("转化为十进制数是:%d\n",sum);
	
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我了解您的问题。实现十进制二进制可以使用顺序来模拟,具体步骤如下: 1.将十进制数入。 2.用顶元素除以二,得到商和余数,余数入。 3.重复第2步,直到商为0。 4.弹出中所有元素,即为该十进制数的二进制表示。 需要注意的是,在弹出中元素时,要注意顺序,以得到正确的二进制表示。 希望我的回答对您有所帮助。 ### 回答2: 十进制转化二进制的过程可以通过顺序来实现。首先,我们需要创建一个空,作为二进制数的容器。 将十进制数从右往左依次除以2,将余数依次压入中,直到除完。 接下来,我们开始弹出中的元素,即从中取出元素,直到为空。将弹出的元素依次排列起来,即为十进制数的二进制表示。 举个例子,我们将十进制数13转化二进制数。 首先,将13除以2,得到的余数为1,将1压入中。然后将13除以2,得到的商为6,再次除以2,得到余数为0,将0压入中。最后,将6除以2,得到的商为3,再次除以2,得到的余数为1,将1压入中。 现在我们开始弹出中的元素,依次为1、0、1。将它们按照弹出顺序排列起来,得到的二进制数表示为101。 因此,十进制数13转化二进制数的结果是101。 以上就是使用顺序实现十进制转化二进制的过程。通过这种方法,我们可以将任意十进制转化为对应的二进制数。 ### 回答3: 十进制转化二进制可以通过顺序来实现。首先,我们需要明确十进制换为二进制的原理。 在十进制换为二进制时,我们需要不断地除以2,并将余数存入中。具体操作如下: 1. 初始化一个空的顺序。 2. 将十进制数除以2,并取得其余数。 3. 将余数入。 4. 将十进制数除以2取整,然后继续执行第2步骤,直到十进制数变为0. 5. 从顶开始依次弹出中的元素,即可得到二进制数。 下面是一个具体的例子来说明: 以十进制数12转化二进制数为例。 1. 初始化一个空的顺序。 2. 12除以2,得到6余数0。将余数0入。 3. 6除以2,得到3余数0。将余数0入。 4. 3除以2,得到1余数1。将余数1入。 5. 1除以2,得到0余数1。将余数1入。 6. 十进制数变为0,停止除法运算。 7. 从顶开始弹出中的元素,得到的顺序就是12的二进制表示。 第一个弹出的元素是1,第二个是1,第三个是0,第四个是0。 因此,12的二进制表示为1100。 通过以上步骤,我们可以将任意的十进制转化二进制数。这个过程中顺序的作用是将余数按照反序存储,然后逐个弹出,最终得到正确的二进制表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值