编写用c语言的栈将十进制转换为十六进制的代码
时间: 2023-09-05 15:04:33 浏览: 120
### 回答1:
以下是一个用C语言编写的将十进制转换为十六进制的栈实现代码。
```
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
void Stack_Init(Stack *s) {
s->top = -1;
}
int Stack_IsEmpty(Stack *s) {
return s->top == -1;
}
int Stack_IsFull(Stack *s) {
return s->top == (STACK_SIZE - 1);
}
void Stack_Push(Stack *s, int value) {
if (Stack_IsFull(s)) {
printf("Stack is full\n");
return;
}
s->top++;
s->data[s->top] = value;
}
int Stack_Pop(Stack *s) {
if (Stack_IsEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
int value = s->data[s->top];
s->top--;
return value;
}
int main() {
int decimal, remainder;
char hex[STACK_SIZE];
int i = 0;
Stack s;
Stack_Init(&s);
printf("Enter decimal number: ");
scanf("%d", &decimal);
while (decimal > 0) {
remainder = decimal % 16;
Stack_Push(&s, remainder);
decimal /= 16;
}
while (!Stack_IsEmpty(&s)) {
remainder = Stack_Pop(&s);
switch (remainder) {
case 10:
hex[i++] = 'A';
break;
case 11:
hex[i++] = 'B';
break;
case 12:
hex[i++] = 'C';
break;
case 13:
hex[i++] = 'D';
break;
case 14:
hex[i++] = 'E';
break;
case 15:
hex[i++] = 'F';
break;
default:
hex[i++] = remainder + '0';
break;
}
}
printf("Hexadecimal: ");
for (int j = i - 1; j >= 0; j--) {
printf("%c", hex[j]);
}
printf("\n");
return 0;
}
```
### 回答2:
下面是使用C语言编写的十进制转十六进制的栈代码:
```c
#include <stdio.h>
void DecimalToHex(int decimal) {
int stack[100], i = 0;
while (decimal != 0) {
stack[i] = decimal % 16;
decimal /= 16;
i++;
}
printf("转换为十六进制:");
for (int j = i - 1; j >= 0; j--) {
if (stack[j] < 10) {
printf("%d", stack[j]);
} else {
char hexChar = 'A' + stack[j] - 10;
printf("%c", hexChar);
}
}
printf("\n");
}
int main() {
int decimal;
printf("请输入一个十进制数:");
scanf("%d", &decimal);
DecimalToHex(decimal);
return 0;
}
```
这段代码首先定义了一个栈数组`stack`,用于存储转换后的十六进制数字。然后通过除以16和取余操作,将十进制数每一位的余数依次存入栈中,并将十进制数除以16,直到十进制数为0为止。然后按照逆序的方式从栈中弹出数字,并将其转换为对应的十六进制数进行打印。最后在`main`函数中,通过用户输入的十进制数调用`DecimalToHex`函数进行转换和打印。
### 回答3:
下面是用C语言编写的将十进制数转换为十六进制数的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100 // 假设栈的最大容量为100
// 定义栈结构
typedef struct {
int top;
unsigned int data[MAX_STACK_SIZE];
} Stack;
// 初始化栈
void init(Stack* stack) {
stack->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->top == -1;
}
// 入栈
void push(Stack* stack, unsigned int value) {
if (stack->top == MAX_STACK_SIZE - 1) {
printf("栈已满!\n");
return;
}
stack->data[++stack->top] = value;
}
// 出栈
unsigned int pop(Stack* stack) {
if (isEmpty(stack)) {
printf("栈是空的!\n");
return 0;
}
return stack->data[stack->top--];
}
// 将十进制数转换为十六进制数
void decimalToHexadecimal(int decimal) {
if (decimal == 0) {
printf("0\n");
return;
}
Stack stack;
init(&stack);
while (decimal != 0) {
push(&stack, decimal % 16);
decimal /= 16;
}
printf("转换为十六进制的结果:");
while (!isEmpty(&stack)) {
unsigned int value = pop(&stack);
if (value < 10)
printf("%u", value);
else
printf("%c", value - 10 + 'A');
}
printf("\n");
}
int main() {
int decimal;
printf("请输入一个十进制数:");
scanf("%d", &decimal);
decimalToHexadecimal(decimal);
return 0;
}
```
以上代码通过栈的先入后出的特性,将十进制数转换为十六进制数的每一位依次存储到栈中,然后再依次弹出栈中的元素进行打印,即可得到转换结果。