以上为题目:
以下为代码:
#include <stdio.h>
#include <stdlib.h>
#define Stack_init_size 1000
#define Stackincrement 100
typedef int Selement;
typedef struct
{
Selement *top;
Selement *base;
int Stacksize;
}Sqstack;
int Initstack(Sqstack *S)//万年不变的初始化
{
S->base=(Selement *)malloc(Stack_init_size*sizeof(Selement));
if(!S->base)return -1;
S->top=S->base;
S->Stacksize=Stack_init_size;
return 1;
}
int Push(Sqstack *S,int e)//入栈函数,学过栈的都知道
{
if(S->top-S->base>=S->Stacksize)//栈满,追加储存空间
{
S->base=(Selement *)realloc(S->base,(S->Stacksize+Stackincrement)*sizeof(Selement));
if(!S->base)return -1;
S->top=S->base+S->Stacksize;
S->Stacksize+=Stackincrement;
}
*S->top++=e;
return 0;
}
int Pop(Sqstack *S,int e)//出栈函数,我写的不大一样
{//主要是因为编译器
if(S->top == S->base)
exit(-1);
else
{
e=*--S->top;
return e;
}
}
int Stackempty(Sqstack *S)//判断栈是否为空
{
if(S->base==S->top)return 1;
else return 0;
}
void Change(Sqstack *S,int n,int r)
{//转换进制
int e;
while(n)//此处核心算法
{
Push(S,n%r);
n=n/r;
}
while(!Stackempty(S))
{//当栈不为空的时候输出
printf("%d",Pop(S,e));
}
}
int main()
{
int n;
int r;
Sqstack S;
scanf("%d",&n);
scanf("%d",&r);
Initstack(&S);
Change(&S,n,r);
return 0;
}
此代码在codeblocks环境中运行