#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack* s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack* s) {
return s->top == -1;
}
// 压栈
int push(Stack* s, char value) {
if (s->top == MAXSIZE - 1) {
return 0; // 栈满
}
s->data[++(s->top)] = value;
return 1;
}
// 出栈
char pop(Stack* s) {
if (isEmpty(s)) {
return '\0'; // 栈空
}
return s->data[(s->top)--];
}
// 获取栈顶元素
char peek(Stack* s) {
if (isEmpty(s)) {
return '\0'; // 栈空
}
return s->data[s->top];
}
// 十进制数转换为其他进制数
void decimalToBase(int n, int base, Stack* s) {
char digits[] = "0123456789ABCDEF";
while (n > 0) {
push(s, digits[n % base]);
n /= base;
}
}
// 从栈中弹出元素并构建结果字符串
void buildResult(Stack* s, char* result) {
int index = 0;
while (!isEmpty(s)) {
result[index++] = pop(s);
}
result[index] = '\0'; // 添加字符串结束符
// 反转结果字符串
int left = 0, right = index - 1;
while (left < right) {
char temp = result[left];
result[left] = result[right];
result[right] = temp;
left++;
right--;
}
}
int main() {
Stack s;
initStack(&s);
int decimalNumber;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNumber);
int base;
printf("请输入目标进制 (2, 8, 16): ");
scanf("%d", &base);
if (base < 2 || base > 16) {
printf("无效的进制!\n");
return 1;
}
decimalToBase(decimalNumber, base, &s);
char result[MAXSIZE];
buildResult(&s, result);
printf("转换结果: %s\n", result);
return 0;
}