利用栈实现从键盘输入一数,进行进制转换操作。A:顺序栈B:链栈。C语言代码
时间: 2024-11-05 13:24:21 浏览: 28
利用栈实现进制转换的一个常见方法是通过模拟计算过程,将用户输入的数字逐位读取,并根据目标进制规则进行处理。这里我们可以选择使用数组作为栈来简化操作,因为数组可以直接通过索引来访问元素,不需要像链表那样额外操作指针。
假设我们只考虑十进制转二进制和十六进制的情况,可以先创建一个大小固定的栈,然后依次读取用户的输入,将其转换成对应的进制表示并入栈。当用户输入结束时,栈顶就存放了结果。
下面是一个简单的C语言代码示例,使用数组顺序栈来实现这个功能:
```c
#include <stdio.h>
#include <string.h>
#define STACK_SIZE 8 // 栈的最大容量
// 结构体代表栈的数据结构
typedef struct {
int stack[STACK_SIZE]; // 整型数组存储数据
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 入栈
void push(Stack *s, int num) {
if (s->top == STACK_SIZE - 1) {
printf("Stack overflow!\n");
return;
}
s->stack[++s->top] = num;
}
// 出栈并返回栈顶元素
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack underflow!\n");
return -1;
}
return s->stack[s->top--];
}
// 主函数
void decimal_to_binary_hexadecimal(int input, char *output, int base) {
Stack s;
init(&s);
while (input != '\0') { // 循环直到遇到输入结束符
int digit = input % base;
push(&s, digit); // 将当前位入栈
input /= base; // 向左移位
}
// 输出结果
int result = pop(&s);
while (result != -1) {
output++; // 指向下一个字符位置
switch (base) {
case 2: // 十进制转二进制
*output++ = '0' + result;
break;
case 16: // 十进制转十六进制
*output++ = (char)(result <= 9 ? '0' + result : 'A' + result - 10);
break;
default: // 未知基础,错误处理
printf("Invalid base!\n");
return;
}
result = pop(&s);
}
*output = '\0'; // 添加字符串结束符
}
int main() {
char input[100], binary[50], hex[10];
scanf("%s", input);
int base;
printf("Enter the target base for conversion (2 for binary, 16 for hexadecimal): ");
scanf("%d", &base);
decimal_to_binary_hexadecimal(input, binary, base);
printf("Binary representation: %s\nHexadecimal representation: %s\n", binary, hex);
return 0;
}
```
这个程序首先接收用户输入的十进制数和目标进制,然后通过栈操作将每个位数转换并依次出栈,最后输出相应的二进制或十六进制表示。
注意:此代码未包括异常处理和用户输入验证,实际使用时需要添加这些部分。此外,对于大数值,这种方法可能会有局限性,因为栈的深度有限。如果要处理任意长度的输入,可以考虑使用动态内存分配或递归。
阅读全文