用栈实现10进制转换成2进制、8进制和16进制的代码,规定用c语言
时间: 2023-04-08 20:05:12 浏览: 84
以下是用栈实现10进制转换成2进制、8进制和16进制的代码,使用C语言编写:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
// 定义栈结构体
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, int x) {
if (isFull(s)) {
printf("Stack is full!\n");
exit(1);
}
s->data[++s->top] = x;
}
// 出栈操作
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[s->top--];
}
// 10进制转2进制
void decimalToBinary(int n) {
Stack s;
initStack(&s);
while (n > 0) {
push(&s, n % 2);
n /= 2;
}
printf("2进制数为:");
while (!isEmpty(&s)) {
printf("%d", pop(&s));
}
printf("\n");
}
// 10进制转8进制
void decimalToOctal(int n) {
Stack s;
initStack(&s);
while (n > 0) {
push(&s, n % 8);
n /= 8;
}
printf("8进制数为:");
while (!isEmpty(&s)) {
printf("%d", pop(&s));
}
printf("\n");
}
// 10进制转16进制
void decimalToHexadecimal(int n) {
Stack s;
initStack(&s);
while (n > 0) {
push(&s, n % 16);
n /= 16;
}
printf("16进制数为:");
while (!isEmpty(&s)) {
int x = pop(&s);
if (x < 10) {
printf("%d", x);
} else {
printf("%c", x - 10 + 'A');
}
}
printf("\n");
}
int main() {
int n;
printf("请输入一个10进制数:");
scanf("%d", &n);
decimalToBinary(n);
decimalToOctal(n);
decimalToHexadecimal(n);
return 0;
}