解题思路:
注意事项:
参考代码:
#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 人评分
点我有惊喜!你懂得!浏览:2028 |
钟神赛车 (C语言代码)浏览:911 |
成绩转换 (C语言代码)浏览:1048 |
WU-字符串比较 (C++代码)浏览:824 |
WU-printf基础练习2 (C++代码)浏览:2061 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
【蟠桃记】 (C语言代码)浏览:1084 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:590 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1483 |