#include
#include
void convert(unsigned long n, int base) {
if (n == 0) return;
convert(n / base, base);
int r = n % base;
putchar(r < 10 ? '0' + r : 'A' + r - 10);
}
int main() {
unsigned long n; int base;
printf("輸入十進制數: "); scanf("%lu", &n);
printf("輸入目標進制(2-16): "); scanf("%d", &base);
if (n == 0) putchar('0');
else convert(n, base);
putchar('\n');
return 0;
}
遞歸深度 = logbase(n),32 位整數最多 32 層(base=2),棧安全。
#include
#define MAX 64
int main() {
unsigned long n; int base;
scanf("%lu %d", &n, &base);
char stack[MAX]; int top = 0;
if (n == 0) { putchar('0'); return 0; }
while (n) {
int r = n % base;
stack[top++] = r < 10 ? '0' + r : 'A' + r - 10;
n /= base;
}
while (top--) putchar(stack[top]);
putchar('\n');
return 0;
}
棧模擬遞歸:餘數入棧,輸出時出棧,順序自動反轉。
double 存儲整數 → 精度風險,應用 unsigned long。fmod/floor 浮點運算慢且不精確,整數 % / 即可。%lf 讀取 double,改為 %lu 讀無號長整數。
typedef struct { char data[MAX]; int top; } Stack;
void push(Stack *s, char c) { if (s->top < MAX) s->data[s->top++] = c; }
char pop(Stack *s) { return s->top ? s->data[--s->top] : 0; }
// 主邏輯同數組版,替換為 push/pop
進制轉換核心:反複取餘、反序輸出。遞歸簡潔,棧顯式可控。整數運算優於浮點。C 標準庫 itoa 非標準,手寫更可移植。