7-3 数据结构考题 十进制转换为八进制

进制转化相关的问题呢,就是取那个数x对要转化成的进制m取余,然后将余数入栈,再x=x/m,再进行循环:

​
int x=15,m=8,elem;
while(x!=0){
elem=x%m;
*S.top++=elem;
x=x/m;
}

​

利用栈(以顺序栈作存储结构)实现进制转换。给定一个十进制非负整数,编程将该数以八进制形式输出。

顺序栈的类型定义:

#define MAXSIZE 100   // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct
{   ElemType  *base;
    ElemType  *top;
}SqStack;

输入格式:

输入一个十进制非负整数。

输出格式:

输出转换后的八进制数。

输入样例:

100

输出样例:

在这里给出相应的输出。例如:

144

 代码 如下:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int SElemType ;
#define OVERFLOW -2
#define OK 1
#define ERROR -1
using namespace std;
//建立栈
#define MAXSIZE 100   //顺序栈存储空间的分配量
typedef struct{
    SElemType *base;   //栈底指针
    SElemType *top;   //栈顶指针
    int stacksize;    //栈可用的最大容量
}SqStack;
//顺序栈的初始化
Status InitStack( SqStack &S){
    //构造一个空表
    S.base=new SElemType[MAXSIZE];
    //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
    if(!S.base)
        exit(OVERFLOW);  //存储分配失败
    S.top=S.base;  //top初始为空栈
    S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE
    return OK;
}
//顺序栈的入栈
Status push(SqStack &S,SElemType x){
    int elem,m=8;
    //插入元素e为新的栈顶元素
    if(S.top-S.base==S.stacksize)
        return ERROR;//栈满
while(x!=0){
    elem=x%m;
     *S.top++=elem;//元素e压入栈顶,栈顶指针加一
    x=x/m;
}
    return OK;
}
//数据元素出栈
Status pop( SqStack &S,SElemType &e){
    if(S.top==S.base) return ERROR;//栈空
    while(S.top!=S.base){
    e=*--S.top;   //栈顶指针减一,再将栈顶元素赋给e
    cout<<e;
    }
    return OK;
}
int main(){
    int x,e;
    cin>>x;
    SqStack S;
    InitStack(S);
    push(S,x);
    pop(S,e);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值