以下为“十进制数转换为其他进制数”的示例:
1. 用c语言实现的版本
#include <stdio.h>
#include <stdlib.h>
#define StackSize 100 /* 假定预分配的栈空间最多为100个元素 */
typedef int DataType; /*假定栈元素的数据类型为整型 */
typedef struct{
DataType data[StackSize];
int top;
}SeqStack;
/* 初始化,将顺序栈置空 */
void Initial(SeqStack *S)
{
S->top = -1;
}
/* 判断栈是否为空 */
int IsEmpty(SeqStack *S)
{
return S->top == -1;
}
/* 判断栈是否已满 */
int IsFull(SeqStack *S)
{
return S->top == StackSize - 1;
}
/*进栈*/
void Push(SeqStack *S, DataType x)
{
if (IsFull(S))
{
printf("栈上溢"); /* 上溢,退出运行 */
exit(1);
}
S->data[++S->top] = x;/* 栈顶指针加1后,将x入栈 */
}
/*出栈*/
DataType Pop(SeqStack *S)
{
if (IsEmpty(S))
{
printf("栈为空"); /*下溢,退出运行*/
exit(1);
}
return S->data[S->top--];/*栈顶元素返回后,将栈顶指针减1*/
}
/* 取栈顶元素*/
DataType Top(SeqStack *S)
{
if (IsEmpty(S))
{
printf("栈为空"); /*下溢,退出运行*/
exit(1);
}
return S->data[S->top];
}
/*假设N是非负的十进制整数,输出等值的B进制数*/
void MultiBaseOutput(int N, int B)
{
int i;
SeqStack S;
/* 初始化,将顺序栈置空 */
Initial(&S);
/*从右向左产生B进制的各位数字,并将其进栈*/
while (N)
{
Push(&S, N%B); /* 将bi进栈 0<=i<=j */
N = N / B;
}
/*栈非空时,退栈输出*/
while (!IsEmpty(&S))
{
i = Pop(&S);
printf("%d", i);
}
}
void main()
{
int ordNum; //1023
int base; //2
printf("请输入十进制数:\n");
scanf("%d", &ordNum);
printf("请输入转换进制:(n>=2)\n");
scanf("%d", &base);
printf("转换结果为:\n");
MultiBaseOutput(ordNum, base);
printf("\n");
}
运行结果如下图所示: