题目描述
将十进制数转换为八进制,并输出。
要求先拷贝前面一个栈的实现,如果使用顺序栈要调整容量。再利用其实现conversion函数。
输入
输入包含若干十进制正整数。
输出
输出相应的八进制数,每个占一行。
样例输入 Copy
1
2
3
7
8
9
19
10020345
样例输出 Copy
1
2
3
7
10
11
23
46162771
代码实现
/***链栈的实现***/
#include<iostream>
#include<fstream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW - 2
typedef int Status;
typedef int SElemType;
typedef struct StackNode {
SElemType data;
struct StackNode *next;
} StackNode, *LinkStack;
//算法3.5 链栈的初始化
Status InitStack(LinkStack &s) // 构造一个空栈 S,栈顶指针置空
{
s = NULL;
return OK;
}
void DestroyStack(LinkStack &s)
{
LinkStack next;
while(s){
next = s->next;
delete s;
s = next;
}
}
bool StackEmpty(LinkStack s)
{
/****在此下面完成代码***************/
if(s==NULL) return true;
else return false;
/***********************************/
}
//算法3.6 链栈的入栈
Status Push(LinkStack &s, SElemType e) //在栈顶插入元素e
{
/****在此下面完成代码***************/
StackNode *p;
p=new StackNode;
p->data=e;
p->next=s;
s=p;
return OK;
/***********************************/
}
//算法3.7 链栈的出栈
Status Pop(LinkStack &s, SElemType &e) //删除S的栈顶元素,用e返回其值
{
/****在此下面完成代码***************/
if(s==NULL) return ERROR;
StackNode *p;
e=s->data;
p=s;
s=s->next;
delete p;
return OK;
/***********************************/
}
//算法 进制转换
void conversion(int n)
{
int temp;
LinkStack p;
InitStack(p);
while(n){
Push(p,n%8);
n=n/8;
}
while(!StackEmpty(p)){
Pop(p,temp);
cout<<temp;
}
cout << endl;
}
//算法3.8 取链栈的栈顶元素
SElemType GetTop(LinkStack s) //返回S的栈顶元素,不修改栈顶指针
{
/****在此下面完成代码***************/
return s->data;
/***********************************/
}
void PrintStack(LinkStack s)
{
for(LinkStack p = s; p; p = p->next) {
cout << p->data;
if(p->next)
cout << ' ';
}
cout << endl;
}
int main()
{
LinkStack s;
SElemType e,n;
string op;
InitStack(s);
while(cin >> n) {
conversion(n);
}
DestroyStack(s);
return 0;
}