/****************************************************************
* name;Decimal To Hexdecimal
* function:进制转换
* parameter;
* ReValue;
* author;小北blog
* attention;
* date;2024.04.25
* history;
* version;
* Copyright(c) 2024 huahuadebaby99@163.com All rights Reserved
*****************************************************************/
/*进制转换函数接口 非负数十进制转成十六进制*/
#define Size 100
// 定义栈结构体
typedef struct
{
int data[Size];
int top;
} Stack;
// 初始化栈
void init_Stack(Stack *stack)
{
int top = -1;
}
// 判断栈空间是否为空
bool IsEmpty(Stack *stack)
{
return stack->top == -1;
}
// 判断栈空间是否已满
bool IsFull(Stack *stack) // 传入的是栈结构体
{
return stack->top == Size - 1; // top的值为-1开始
}
// 入栈
void Push(Stack *stack, int value)
{
if (!IsFull(stack)) // 不为空的情况下
{
stack->data[++stack->top] = value; // 将value的值放到栈空间data里面
}
}
// 出栈
int Pop(Stack *stack)
{
if (!IsEmpty(stack))
{
return stack->data[stack->top--];
}
return -1; // 返回-1表示栈为空
}
// 十进制Dec转换到十六进制Hex,创建函数,输入十进制
int DectoHex(int decimal)
{
// 调用stack结构体
Stack stack;
// 调用已初始化栈结构体
init_Stack(&stack);
// 记录存放先进入栈空间的值
int recodes;
while (decimal != '0') // 循环找到16进制尾数
{
recodes = decimal % 16; // 取模,当decimal循环n次后小于16时栈顶的值为16进制的尾数
Push(&stack, recodes); // 入栈
decimal = decimal / 16; // 更新十进制的值
}
while (!IsEmpty(&stack)) // 如果栈结构体出栈完,为空
{
// 出栈操作
int inten = Pop(&stack);
if (inten < 10)
{
printf("%d", inten);
}
else
{
printf("%c", 'A' + inten - 10);
}
}
}
int main()
{
int Dec;
printf("输入一个非负整数!!!");
scanf("%d", &Dec);
if (Dec < 16)
{
printf("输入有误,请输入有效的值!!!");
return -1;
}
DectoHex(Dec);
return 0;
}
标签:转换,进制,decimal,int,top,stack,return,Stack
From: https://www.cnblogs.com/ikunkunkun/p/18157699