数据结构实验之栈一:进制转换
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出。
输入
第一行输入需要转换的十进制数;
第二行输入R。
第二行输入R。
输出
输出转换所得的R进制数。
示例输入
1279 8
示例输出
2377
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10//存储空间分配增量;
typedef int ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)//建立空栈;
{
S.base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base) exit(-1);//存储分配失败;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int 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(-1);//分配失败;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int Pop(SqStack &S,ElemType &e)
{
if(S.top==S.base) return 0;
e=*--S.top;
return 1;
}
int StackEmpty(SqStack &S)
{
if(S.top==S.base) return 0;
else return 1;
}
int main()
{
int num,ss,e;
while(~scanf("%d %d",&num,&ss))
{
SqStack S;
InitStack(S);
while(num)
{
Push(S,num%ss);
num/=ss;
}
while(StackEmpty(S))
{
Pop(S,e);
printf("%d",e);
}
}
}