HNCU 1330: 算法3-1:八进制数
题目描述
将十进制数转换为八进制,并输出。
图:将十进制数转换为八进制并输出
输入
输入包含若干十进制正整数。
输出
输出相应的八进制数,每个占一行。
样例输入
1
2
3
7
8
9
19
10020345
样例输出
1
2
3
7
10
11
23
46162771
栈的简单应用
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 0
#define OK 1
#define ERROR 0
typedef int SElemType;
typedef int Status;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *p)//构造一个空栈p
{
p->base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!p->base )
exit(OVERFLOW);
p->top = p->base;
p->stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push(int e,SqStack *p)//插入e为栈的新元素
{
SElemType *newbase;
if((p->top -p->base) >= p->stacksize )
{
newbase = (SElemType*)realloc(p->base,(STACKINCREMENT+p->stacksize )*sizeof(SElemType));
if(!newbase)
exit(OVERFLOW);
p->base = newbase;
p->stacksize += STACKINCREMENT;
}
*(p->top)++ = e;
return OK;
}
Status StackEmpty(SqStack *p)//若栈为空栈,则返回OK,否则返回ERROR
{
if(p->base == p->top )
return OK;
return ERROR;
}
Status Pop(SqStack *p,int *n)//若栈不为空,则删除栈顶元素,用*n返回其值
{
if(p->base == p->top )
return ERROR;
*n = *(--p->top);
return OK;
}
void Conversion(int n,SqStack *p)//对于任意输入的一个非负十进制整数,打印输出与其等值的八进制数
{
int e;
InitStack(p);
while(n)
{
Push(n%8,p);
n/=8;
}
while(!StackEmpty(p))
{
Pop(p,&e);
printf("%d",e);
}
printf("\n");
}
int main()
{
int n;
SqStack p;
while(scanf("%d",&n)!=EOF)
{
Conversion(n,&p);
}
return 0;
}