当前位置:编程学习 > C/C++ >>

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

题目描述
 
将十进制数转换为八进制,并输出。 
 
图:将十进制数转换为八进制并输出 
 
 
 
输入格式
 
输入包含若干十进制正整数。 
 
 
输出
 
输出相应的八进制数,每个占一行。 
 
 
样例输入
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;
}

 


补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,