使用栈实现数制的转换,包括十进制到二、八、十六进制的转换C语言
时间: 2023-06-08 11:05:18 浏览: 130
可以使用栈来实现数制的转换。具体而言,可以将十进制数不断除以目标进制的基数(2、8、16),将余数存入栈中,在将商作为新的被除数,直到商为0为止。最后将栈中的元素逐个出栈,得到转换后的数。
以下是使用栈实现十进制数转换为二进制、八进制、十六进制的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isFull(Stack *s) {
return s->top == STACK_SIZE - 1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
void push(Stack *s, int x) {
if (isFull(s)) {
printf("栈已满");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("栈已空");
exit(1);
}
return s->data[s->top--];
}
void conversion(int num, int base) {
Stack s;
initStack(&s);
while (num != 0) {
push(&s, num % base);
num /= base;
}
while (!isEmpty(&s)) {
int digit = pop(&s);
if (digit < 10)
printf("%d", digit);
else
printf("%c", 'A' + digit - 10); // 对于十六进制,将10以上的数字转为大写字母A~F
}
}
int main() {
int num, base;
printf("请输入一个十进制数:");
scanf("%d", &num);
printf("请输入要转换的进制(2、8、16):");
scanf("%d", &base);
switch (base) {
case 2:
printf("转换结果:");
conversion(num, 2);
break;
case 8:
printf("转换结果:");
conversion(num, 8);
break;
case 16:
printf("转换结果:");
conversion(num, 16);
break;
default:
printf("错误:只能转换为二进制、八进制、十六进制\n");
break;
}
return 0;
}
```
这个程序实现了栈的基本操作,以及利用栈实现数制的转换。注意,对于十六进制,除以16时需要特别处理余数为10~15的情况,可以将这些数字转为大写字母A~F。
阅读全文