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

来源:互联网 发布:漏洞网站源码 编辑:程序博客网 时间:2024/06/05 20:46

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 -1typedef 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;}


 

原创粉丝点击