C语言编程实现进制转换的函数用顺序栈做
时间: 2024-10-23 17:06:29 浏览: 16
C语言-顺序栈实现十进制转换为二进制-八进制-十六进制
在C语言中,可以使用顺序栈(也称为简单堆栈)实现基础的进制转换。例如,将十进制转换成其他进制(如二进制、八进制或十六进制)。这里我们主要关注从十进制到其他进制的转换。下面是一个简单的函数示例,用于将整数转换为字符串形式的指定进制:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_BUF_SIZE 50
// 函数声明,用于处理进制转换
char* convert_to_base(int num, int base);
// 序列栈结构体
typedef struct {
char* stack;
int top;
} Stack;
// 初始化栈
Stack* init_stack() {
Stack* s = (Stack*)malloc(sizeof(Stack));
s->stack = (char*)malloc(MAX_BUF_SIZE);
s->top = -1;
return s;
}
// 入栈操作
void push(Stack* s, char c) {
if (s->top >= MAX_BUF_SIZE - 1) {
printf("Stack overflow!\n");
return;
}
s->stack[++s->top] = c;
}
// 出栈操作
char pop(Stack* s) {
if (s->top == -1) {
printf("Stack underflow!\n");
return '\0';
}
return s->stack[s->top--];
}
// 清空栈
void clear_stack(Stack* s) {
free(s->stack);
s->stack = NULL;
s->top = -1;
}
// 十进制转其他进制的核心算法
char* convert_to_base_helper(int num, int base, Stack* s) {
// 数字转换为字符并入栈
if (num > 0) {
push(s, (char)(num % base + '0')); // 0-9
convert_to_base_helper(num / base, base, s); // 递归处理剩余位
} else {
push(s, '\0'); // 表示结束,添加空字符
}
}
// 主函数
char* convert_to_base(int num, int base) {
Stack* s = init_stack();
convert_to_base_helper(num, base, s);
clear_stack(s); // 移除栈顶元素
return s->stack; // 返回转换后的字符串
}
int main() {
int decimal_num = 12345;
char* result = convert_to_base(decimal_num, 2); // 转换为二进制
printf("Decimal %d in binary is: %s\n", decimal_num, result);
free(result);
return 0;
}
```
这个程序首先初始化了一个栈,然后通过递归的方式将十进制数转换为相应进制的数字,每次循环都将余数压入栈。当十进制数变成0时,说明转换完成,最后返回栈里的字符作为结果。
阅读全文