#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义栈的最大容量
typedef struct {
int top; // 栈顶指针
int data[MAX_SIZE]; // 栈中的数据
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, int x) {
if (is_full(s)) {
printf("Stack is full\n");
exit(1);
}
s->data[++s->top] = x;
}
// 出栈操作
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty\n");
exit(1);
}
return s->data[s->top--];
}
// 十进制转换为任意进制
void conversion(int n, int base) {
Stack s;
init(&s);
while (n > 0) {
int remainder = n % base; // 取余数
push(&s, remainder); // 入栈
n /= base; // 更新商
}
printf("转换结果为:");
while (!is_empty(&s)) {
int x = pop(&s); // 出栈
if (x < 10) {
printf("%d", x);
} else {
printf("%c", x - 10 + 'A');
}
}
printf("\n");
}
int main() {
int n, base;
printf("请输入一个整数:");
scanf("%d", &n);
printf("请输入进制数(2-36):");
scanf("%d", &base);
conversion(n, base);
return 0;
}
需要注意的是,本程序支持的进制范围是2-36(包含2和36),如果要支持更高的进制数,需要修改输出语句中的字符范围。