【栈】十进制转换成二进制的过程及算法实现

本文介绍了一种使用栈结构将十进制数转换为二进制数的算法。通过不断除以2并将余数压入栈中,最后依次弹出栈中的元素即可得到对应的二进制表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思想过程:

首先输入一个十进制的数e,然后让这个十进制的数字一直除以2,如果e/2!=0时,把e%2压入栈中,并且令e=e/2,然后继续循环。当e/2==0时,把e的值放入栈中。然后把栈中的元素输出出来,即为所求得的二进制的数。


算法实现:

#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define STACK_INT_SIZE 10  /*存储空间初始分配量*/
#define STACKINCREMENT 5  /*存储空间分配增量*/
typedef  int ElemType; /*定义元素的类型*/
typedef struct{
    ElemType *base;
    ElemType *top;
    int stacksize;     /*当前已分配的存储空间*/
}SqStack;

 
int push(SqStack *S,ElemType e); /*入栈*/
int Pop(SqStack *S,ElemType *e);  /*出栈*/
void PrintStack(SqStack *S);   /*出栈并输出栈中元素*/


int Push(SqStack *S,ElemType e){
	if(S->top-S->base==STACK_INT_SIZE)
		return 0;
    *(++S->top)=e;
	return 1;
}/*Push*/

int Pop(SqStack *S,ElemType *e){
	if(S->top==S->base)
		return 0;
	*e=*S->top;
	S->top--;
	return 1;
}/*Pop*/


void Conversion(SqStack *S,ElemType e)
{
	while(e/2)
	{
		Push(S,e%2);
		e/=2;
	}
	Push(S,e);

}

void PrintStack(SqStack *S){
    ElemType e;
    while(Pop(S,&e))
        printf("%d",e);
	printf("\n");
}/*Pop_and_Print*/

int main(){
	int num;
	SqStack *S;
	S=(SqStack *)malloc(sizeof(SqStack));
	S->base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType));
    if(!S->base) return ERROR;
    S->top=S->base;
    S->stacksize=STACK_INT_SIZE;

	printf("请输入要转换的数字:\n");
	scanf("%d",&num);
	Conversion(S,num);
	PrintStack(S);
    return 0;
}   	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值