数据结构实验之栈一:进制转换
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出。
输入
第一行输入需要转换的十进制数;
第二行输入R。
第二行输入R。
输出
输出转换所得的R进制数。
示例输入
1279 8
示例输出
2377
这道题考的是栈的知识点。在c++中,有专门定义的栈函数,直接调用就好了。
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int n,r;
cin>>n>>r;
stack<int >s;
while(n)
{
s.push(n%r);
n=n/r;
}
while(!s.empty())
{
cout<<s.top();
s.pop();
}
return 0;
}
怎么样,很简洁吧。但是如何自己创建栈呢?下面我是用c写的。
#include<stdio.h>
#include<malloc.h>
#define MaxSize 10000
typedef struct //定义栈
{
int d[MaxSize];
int top;
} Stack;
void InitStack(Stack * &s) //初始化栈
{
s=(Stack *)malloc(sizeof(Stack));
s->top=-1;
}
void ClearStack(Stack * &s) //销毁栈
{
free(s);
}
int StackLength(Stack *s) //求战的长度
{
return s->top+1;
}
int StackEmpty(Stack *s) //判断栈是否为空
{
return s->top==-1;
}
int Push(Stack * &s,int k) //进栈
{
if(s->top==MaxSize-1) //栈满溢出
return 0;
s->d[++s->top]=k;
return 1;
}
int Pop(Stack * &s) //出栈
{
if(s->top==-1) //栈为空
return 0;
s->top--;
return 1;
}
int GetPop(Stack * &s) //取栈顶元素
{
if(s->top==-1) //栈为空
return 0;
return s->d[s->top];
}
void DispStack(Stack *s)
{
for(int i=s->top;i>=0;i--)
printf("%d ",s->d[i]);
}
int main()
{
int n,r;
scanf("%d %d",&n,&r);
Stack *s;
InitStack(s);
while(n)
{
Push(s,n%r);
n=n/r;
}
//DispStack(s);
while(!StackEmpty(s))
{
printf("%d",GetPop(s));
Pop(s);
}
return 0;
}
看起来很高大上的样子。