【資料結構】順序表實現十進位制轉換任意進位制
阿新 • • 發佈:2018-12-15
/* & File : 進位制準換 * Author : Laugh * Copyright: Laugh * 主題 :對於輸入的任意一個非負十進位制小數,列印輸出與其等值的任意進位制小數 * Date : 2018/10/14 */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <malloc.h> #define M 100 typedef char datatype; typedef double datatype_d; typedef struct seqstack { datatype data[M]; char top; } seqstack; /* 初始化順序棧 */ void InitStack(seqstack *s) { s->top = -1; } /* 判斷棧是否為空 */ int StackEmpty(seqstack *s) { if (s->top >= 0) return 1; else return 0; } /* 元素入棧函式 */ seqstack *push(seqstack *s, datatype x) { if (s->top == M-1) return NULL; else { s->top++; s->data[s->top] = x; } return s; } /* 元素出棧函式 */ datatype pop(seqstack *s) { datatype x; x = s->data[s->top]; s->top--; return x; } int main() { seqstack *s; datatype e, n_1, iBase; datatype_d n, d; int i = 0, j = 0, temp; char flag; printf("請輸入需要轉換的十進位制小數:"); scanf("%lf", &n); // 輸入非負十進位制小數 n printf("請輸入需要轉換的進位制:"); scanf("%d", &iBase); s = (struct seqstack*)malloc(sizeof(char)); if (s == NULL) exit(0); /* 將 n 分成整數和小數兩部分 */ e = (int)n; d = n - e; n_1 = e; printf("十進位制小數 %f 轉換成 %d 進位制數為:", n, iBase); if (n_1 == 0) { printf("%d", n_1); } else { InitStack(s); // 初始化棧 if (n > 0) temp = n_1; else temp = -n_1; while(temp) { flag = temp % iBase + '0'; if(flag > '9') flag = flag - '9' + 64; push(s, flag); temp /= iBase; i++; } /* 輸出整數部分 */ if (n_1 < 0) printf("-"); while (j < i) { j++; e = pop(s); printf("%c", e); } } /* 小數部分輸出 */ printf("."); for (int j = 0; j < 8; j++) { d *= iBase; flag = d + '0'; if (flag > '9') flag = flag - '9' + 64; printf("%c", flag); if ((int)d) d -= (int)d; } //printf("0"); return 0; }