题目:
设计一个算法,将一个正十进制整数转化为二进制数进行输出。
分析:
十进制转换为二进制可以通过除留余数法进行,通过不断对二进制数留余数,利用栈将其存储起来。
首先需要具备整数栈的各项基本运算
#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //栈顶指针
}SqStack; //声明顺序栈类型
void InitStack(SqStack *&s) //初始化顺序栈
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
void DestroyStack(SqStack *&s) //销毁顺序栈
{
free(s);
}
bool StackEmpty(SqStack *s) //判断栈是否为空栈
{
return(s->top==-1);
}
bool Push(SqStack *&s,ElemType e) //进栈
{
if(s->top==MaxSize-1) return false; //栈满的情况,即栈上溢出
s->top++;
s->data[s->top]=e;
return true;
}
bool Pop(SqStack *&s,ElemType &e) //出栈
{
if(s->top==-1) return false; //栈为空的情况,即栈下溢出
e=s->data[s->top];
s->top--;
return true;
}
bool GetTop(SqStack *s,ElemType &e) //取栈顶元素
{
if(s->top==-1) return false; //栈为空的情况,即栈下溢出
e=s->data[s->top];
return true;
}
然后进行具体的操作。
#include"sqstack.cpp" //包含整数栈的基本运算函数
void trans(int n)
{
int e;
SqStack *st;
InitStack(st);
while(n>0)
{
Push(st,n%2); //从低位到高位依次进栈
n=n/2;
}
while(!StackEmpty(st)) //输出对应的二进制数,从高位到低位依次输出
{
Pop(st,e);
printf("%d",e);
}
printf("\n");
DestroyStack(st);
}