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("
");
}

int main()
{
    int n;
    SqStack p;
    while(scanf("%d",&n)!=EOF)
    {
        Conversion(n,&p);
    }
    return 0;
} 
原文地址:https://www.cnblogs.com/hellocheng/p/7350135.html