问题遇到的现象和发生背景
在上述程序基础上,实现将二进制转化为十六进制功能
用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 30
#define ElementType int
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode
{
ElementType *Data; //存储元素的数组
Position Top; //栈顶指针
int MaxSize; //堆栈最大容量
};
typedef PtrToSNode Stack;
//顺序栈的创建
Stack CreateStack(int MaxSize)
{
Stack S = (Stack)malloc(sizeof(struct SNode));
S->Data = (ElementType *)malloc(Maxsize * sizeof(ElementType));
S->Top = -1;
S->MaxSize = MaxSize;
return S;
}
//释放栈
void Destory_Stack(Stack *S)
{
if (*S)
free(*S);
*S = NULL;
return;
}
//判断栈是否已满
int IsFull(Stack S)
{
if (S->Top == S->MaxSize - 1)
return 1; //表示堆栈已满
else
return 0; //表示堆栈未满
}
//判断栈是否为空
int IsEmpty(Stack S)
{
if (S->Top == -1)
return 1; //表示空
else
return 0; //表示非空
}
//顺序栈入栈
int Push(Stack S, ElementType X)
{
if (IsFull(S))
{
printf("堆栈已满,不能入栈");
return 0;
}
else
{ //入栈
S->Top++;
S->Data[S->Top] = X;
return 1;
}
}
//顺序栈出栈
ElementType Pop(Stack S)
{
if (IsEmpty(S))
{
printf("堆栈空,不能删除元素");
return 0;
}
else
{ //出栈
return (S->Data[(S->Top)--]);
}
}
//数制转换
int Conversion(int Num, int Radix)
{
Stack S;
int tmp;
if (Radix == 0)
{
printf("基数不能为0\n");
return 0;
}
S = CreateStack(30); //定义堆栈最大值
if (!S)
{
printf("栈初始化失败\n");
return 0;
}
while (Num)
{
Push(S, Num % Radix); //余数入栈
Num = Num / Radix; //商作为被除数
}
while (!IsEmpty(S))
{
tmp = Pop(S);
printf("%d", tmp);
}
printf("\n");
Destory_Stack(&S);
}
//主函数实现
int main()
{
int N, R;
printf("请输入一个十进制数:\n");
scanf("%d", &N);
printf("请输入转换后的数制:\n");
scanf("%d", &R);
Conversion(N, R);
return 0;
}
我的解答思路和尝试过的方法
十进制先转换为二进制再转换为十六进制
我想要达到的结果
在上述程序基础上,实现将二进制转化为十六进制功能