解题思路:

注意事项:

参考代码:

#include<bits/stdc++.h>

#include<iostream>

#include<algorithm>

#include<string>

#include<iomanip>

#include<map>

#include<stack>

#include<queue>

#include<set>

#include<bitset>

#include<memory.h>

#include<time.h>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//#include<stdbool.h>

#include<math.h>

using namespace std;

typedef long long LL;

const int OK=1;

const int ERROR=0;

const int INFEASIBLE=-1;

const int STACK_INIT_SIZE=100;//存储空间初始分配量

const int STACKINCREMENT=10;//存储空间分配增量

typedef int Status;

typedef int SElemType;

Status OutputInt(SElemType e);

Status OutputChar(SElemType e);

using namespace std;

typedef struct

{

    SElemType *base;//栈构造之前和销毁之后,base的值为NULL

    SElemType *top;//栈顶指针

    int stacksize;//当前已分配的存储空间,以元素为单位


    Status InitStack()//构造一个空栈S

    {

        base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

        if(!base)exit(OVERFLOW);//存储分配失败

        top=base;

        stacksize=STACK_INIT_SIZE;

        return OK;

    }//InitStack


    Status DestroyStack()//销毁栈S,S不再存在

    {

        free(base);

        base=NULL;

        top=NULL;

        stacksize=0;

        return OK;

    }//DestroyStack


    Status ClearStack()//把S置为空栈

    {

        top=base;

        return OK;

    }//ClearStack


    Status StackEmpty()//若S为空栈,则返回true,否则返回false

    {

        if(top==base)return true;

        return false;

    }//StackEmpty


    int StackLength()//返回S的元素个数,即栈的长度

    {

        return top-base;

    }//StackLength


    Status GetTop(SElemType &e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR

    {

        if(top==base)return ERROR;

        e=*(top-1);

        return OK;

    }//GetTop


    Status Push(SElemType e)//插入元素e为新的栈顶元素

    {

        if(top-base>=stacksize)//栈满,追加存储空间

        {

            base=(SElemType *)realloc(base,(stacksize+STACKINCREMENT)*sizeof(SElemType));

            if(!base)exit(OVERFLOW);//存储分配失败

            top=base+stacksize;

            stacksize+=STACKINCREMENT;

        }

        (*top++)=e;

        return OK;

    }//Push


    Status Pop(SElemType &e)//若栈不空,则删除S的栈顶元素,并用e返回其值,并返回OK,否则返回ERROR

    {

        if(top==base)return ERROR;

        e=(*--top);

        return OK;

    }//Pop


    Status StackTraverse(int p)//从栈底到栈顶依次对栈中每个元素调用函数visit().一旦visit()失败则操作失败

    {

        SElemType *i=base;

        Status (*visit)(SElemType);

        if(p==1)visit=OutputInt;

        else if(p==0)visit=OutputChar;

        while(top>i)

            visit(*i++);

        puts("");

        return OK;

    }//StackTraverse

}SqStack;


Status OutputInt(SElemType e)

{

    printf("%d ",e);

    return OK;

}

Status OutputChar(SElemType e)

{

    printf("%c",e);

    return OK;

}





void Conversion(int n)//对于输入的任意一个非负十进制整数n,打印输出与其等值的八进制数

{

    typedef int SElemType;


    SqStack S;

    SElemType e;

    S.InitStack();//构造空栈


    while(n)

    {

        S.Push(n%8);

        n/=8;

    }

    while(!S.StackEmpty())

    {

        S.Pop(e);

        printf("%d",e);

    }

    puts("");


    S.DestroyStack();

}

int main()

{    int n;

while (scanf("%d",&n)!=EOF)

    {Conversion(n);

    }

}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论