HNCU1330:算法3-1:八进制数

http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1330

题目描述

 

将十进制数转换为八进制,并输出。
图:将十进制数转换为八进制并输出

 

 

 

输入格式

 

输入包含若干十进制正整数。

 

输出

 

输出相应的八进制数,每个占一行。

 

样例输入

1
2
3
7
8
9
19
10020345

样例输出

1
2
3
7
10
11
23
46162771

 

#include<string.h>

#include<ctype.h>

#include<malloc.h> /* malloc()等 */

#include<limits.h> /* INT_MAX等 */

#include<stdio.h> /* EOF(=^Z或F6),NULL */

#include<stdlib.h> /* atoi() */

#include<math.h> /* floor(),ceil(),abs() */

/* 函数结果状态代码 */

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */

typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */



#define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */

#define STACKINCREMENT 2 /* 存储空间分配增量 */

typedef int SElemType; /* 定义栈元素类型为整型 */

typedef struct SqStack

{

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

    SElemType *top; /* 栈顶指针 */

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

} SqStack; /* 顺序栈 */



Status InitStack(SqStack *S)

{

    /* 构造一个空栈S */

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

    if(!(*S).base)

        exit(OVERFLOW); /* 存储分配失败 */

    (*S).top=(*S).base;

    (*S).stacksize=STACK_INIT_SIZE;

    return OK;

}



Status Push(SqStack *S,SElemType e)

{

    /* 插入元素e为新的栈顶元素 */

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

    {

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

        if(!(*S).base)

            exit(OVERFLOW); /* 存储分配失败 */

        (*S).top=(*S).base+(*S).stacksize;

        (*S).stacksize+=STACKINCREMENT;

    }

    *((*S).top)++=e;

    return OK;

}



Status Pop(SqStack *S,SElemType *e)

{

    /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */

    if((*S).top==(*S).base)

        return ERROR;

    *e=*--(*S).top;

    return OK;

}



Status StackEmpty(SqStack S)

{

    /* 若栈S为空栈,则返回TRUE,否则返回FALSE */

    if(S.top==S.base)

        return TRUE;

    else

        return FALSE;

}



void conversion(int n) /* 算法3.1 */

{

    /* 对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 */

    SqStack s;

    SElemType e;

    InitStack(&s); /* 初始化栈 */

    while(n) /* 当n不等于0 */

    {

        Push(&s,n%8); /* 入栈n除以8的余数(8进制的低位) */

        n=n/8;

    }

    while(!StackEmpty(s)) /* 当栈不空 */

    {

        Pop(&s,&e); /* 弹出栈顶元素且赋值给e */

        printf("%d",e); /* 输出e */

    }

    printf("\n");

}



int main()

{

    int n;

    while(~scanf("%d",&n))

    {

        conversion(n);

    }

    return 0;

}


 

 

你可能感兴趣的:(八进制)