编写用c语言的栈将十进制转换为十六进制的代码
时间: 2023-06-09 10:07:26 浏览: 147
以下是用C语言编写的将十进制数转换为十六进制数的代码,利用栈实现:
```
#include <stdio.h>
#include <stdlib.h>
//定义栈结构体
typedef struct {
int top;
int capacity;
char *array;
} Stack;
//初始化栈
Stack *InitializeStack(int capacity) {
Stack *stack = (Stack*) malloc(sizeof(Stack));
stack->top = -1;
stack->capacity = capacity;
stack->array = (char*) malloc(stack->capacity * sizeof(char));
return stack;
}
//判空栈
int IsEmpty(Stack *stack) {
return stack->top == -1;
}
//判满栈
int IsFull(Stack *stack) {
return stack->top == stack->capacity - 1;
}
//入栈
void Push(Stack *stack, char item) {
if (IsFull(stack)) {
printf("\n栈已满");
} else {
stack->array[++stack->top] = item;
}
}
//出栈
char Pop(Stack *stack) {
if (IsEmpty(stack)) {
printf("\n栈已空");
return '\0';
} else {
return stack->array[stack->top--];
}
}
//转换函数
void ConvertToHex(int num) {
Stack *stack = InitializeStack(100);
int remainder;
while (num != 0) {
remainder = num % 16;
if (remainder < 10) {
Push(stack, (remainder + '0')); //将数字0~9转换为字符'0'~'9'
} else {
Push(stack, (remainder - 10 + 'A')); //将数字10~15转换为字符'A'~'F'
}
num /= 16;
}
//输出结果
printf("转换结果为:0x");
while (!IsEmpty(stack)) {
printf("%c", Pop(stack));
}
//释放栈内存
free(stack->array);
free(stack);
}
//主函数
int main() {
int decimal;
printf("请输入一个十进制数:");
scanf("%d", &decimal);
ConvertToHex(decimal);
return 0;
}
```
该代码中定义了一个栈结构体,并实现了栈的初始化、判空、判满、入栈、出栈等常规操作。主要函数是`ConvertToHex()`,该函数将十进制数转换为十六进制数并输出结果。具体实现思路是:将十进制数不断对16取余数,并将余数入栈,然后将原数除以16并继续重复该过程,直到原数为0为止。最后,将栈中的元素依次出栈并输出即可。注意,数字0~9需要转换为字符'0'~'9',数字10~15需要转换为字符'A'~'F',可以利用转换关系实现。
阅读全文