c语言用堆栈实现数制转换
时间: 2024-05-08 07:21:24 浏览: 103
用栈实现数制转换 c语言
下面是用堆栈实现从十进制转换到任意进制的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_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 == STACK_SIZE - 1;
}
// 压入元素
void push(Stack* s, int x) {
if (is_full(s)) {
printf("Stack overflow.\n");
exit(1);
}
s->data[++s->top] = x;
}
// 弹出元素
int pop(Stack* s) {
if (is_empty(s)) {
printf("Stack underflow.\n");
exit(1);
}
return s->data[s->top--];
}
// 十进制转换为任意进制
void convert(int n, int base) {
Stack s;
init(&s);
while (n > 0) {
int r = n % base;
push(&s, r);
n /= base;
}
while (!is_empty(&s)) {
int r = pop(&s);
if (r < 10) {
printf("%d", r);
} else {
printf("%c", r - 10 + 'A');
}
}
}
int main() {
int n, base;
printf("Enter the number: ");
scanf("%d", &n);
printf("Enter the base: ");
scanf("%d", &base);
printf("%d in base %d is: ", n, base);
convert(n, base);
printf("\n");
return 0;
}
```
该程序首先定义了一个堆栈结构体,其中包含一个整型数组和一个整型变量top,表示栈顶的下标。接着定义了一些堆栈操作函数,包括:初始化堆栈、判断堆栈是否为空、判断堆栈是否已满、压入元素、弹出元素。最后,定义了一个函数convert用于将十进制数n转换为任意进制base,并将结果输出。
在convert函数中,首先创建了一个堆栈s,并将其初始化为空。然后,将n不断除以base,将余数压入堆栈s中,直到商为0。最后,从堆栈s中依次弹出元素并输出,如果弹出的元素小于10,则直接输出,否则输出相应的大写字母。
在main函数中,首先读入要转换的数n和目标进制base,然后调用convert函数进行转换,并将结果输出。
阅读全文