数据结构实验之栈一:进制转换
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出。
输入
第一行输入需要转换的十进制数;
第二行输入R。
第二行输入R。
输出
输出转换所得的R进制数。
示例输入
1279 8
示例输出
2377
提示
#include<iostream>
#include<cstdlib>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
using namespace std;
typedef struct
{
int *base; //在栈构造之前和销毁之后,base的值为NULL
int *top; //栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;
SqStack s;
int e;
int InitStack(SqStack &s)//构造一个空栈
{
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int ));
if(!s.base) //存储分配失败
exit(0);
s.top=s.base;
s.stacksize = STACK_INIT_SIZE;
return 1;
}
int Push(SqStack &s,int e)//压栈,插入元素e为新的栈顶元素
{
if(s.top-s.base>s.stacksize) //栈满,追加存储空间
{
s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int ));
if(!s.base)//存储分配失败
exit(0);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return 1;
}
int Pop(SqStack &s,int &e)//出栈,若栈不空,删除栈顶元素,用e返回其值
{
if(s.top==s.base)
return 0;
e=*--s.top;
return 1;
}
int StackEmpty(SqStack s)//判空
{
if(s.base==s.top)
return true;
else
return false;
}
int main()
{
int N,R;
InitStack(s);
cin>>N>>R;
while(N)
{
Push(s,N%R);
N=N/R;
}
while(!StackEmpty(s))
{
Pop(s,e);
cout<<e;
}
return 0;
}