程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HNCU1330:算法3-1:八進制數

HNCU1330:算法3-1:八進制數

編輯:C++入門知識

題目描述   將十進制數轉換為八進制,並輸出。    圖:將十進制數轉換為八進制並輸出        輸入格式   輸入包含若干十進制正整數。      輸出   輸出相應的八進制數,每個占一行。      樣例輸入 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;
}

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved