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