解题思路:
注意事项:
参考代码:
#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);
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复