题目要求:实现十进制到十六进制的转换,用户输入10进制的数,要求输出该数的16进制表示
解题:进制的转换方法有许多种,可以用数组,循环、栈等方式
下面给出用栈的实现方式
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
struct SeqStackNode//栈节点的结构体定义
{
int MAX; //最大值
int top; //栈顶指针
DataType *elem; //数据储存
};
typedef struct SeqStackNode *SeqStack;
SeqStack SetNullStack_Seq(int m) //空栈的建立
{
SeqStack sstack = (SeqStack)malloc(sizeof(struct SeqStackNode));
if (sstack != NULL) {
sstack->elem = (int*)malloc(sizeof(int)*m);
if (sstack->elem != NULL) {
sstack->MAX = m;
sstack->top = -1;
return(sstack);
}
else {
free(sstack);
return NULL;
}
}
else {
printf("out of space");
return NULL;
}
}
int IsNullStack_seq(SeqStack sstack) //空栈判断函数
{
return(sstack->top == -1);
}
void Push_seq(SeqStack sstack, int x) //入栈函数
{
@@
}
void Pop_seq(SeqStack sstack)//出栈函数
{
if (IsNullStack_seq(sstack))
printf("Underflow!\n");
else
sstack->top = sstack->top - 1;
}
DataType Top_seq(SeqStack sstack)//栈顶元素
{
if (IsNullStack_seq(sstack))
{
printf("it is empty");
return 0;
}
else
return sstack->elem[sstack->top];
}
void Hexconversion(SeqStack sstack, int n) //进制转换函数
{
@@
}
int main()
{
SeqStack mystack = NULL;
int n;
mystack = SetNullStack_Seq(4);
scanf("%d", &n);
Hexconversion(mystack, n);
return 0;
}
下面是入栈函数的实现,其中sstack是顺序栈,x是待进制的元素
void Push_seq(SeqStack sstack, int x)//入栈函数
{
if(sstack->top < sstack->MAX-1)//栈未满
{
sstack->top++;//栈顶指针移动
sstack->elem[sstack->top]=x;//入栈操作
}
else
{
printf("overflow!\n");
}
}
下面是进制转换函数,sstack是需要的栈,n是待转换的十进制的数。
void Hexconversion(SeqStack sstack, int n)
{
if(n==0)//n==0直接进栈即可
{
Push_seq(sstack,0);
}
else
{
while(n>0)//n>0.取余进栈
{
Push_seq(sstack,n%16);
n=n/16;
}
}
while(!IsNullStack_seq(sstack))//栈非空
{
int tmp= Top_seq(sstack);//栈顶元素
Pop_seq(sstack);//出栈
if(tmp<10)//栈顶元素值<10,直接转换
printf("%d",tmp);
else
{
printf("%c",tmp-10+'A');//栈顶元素值>10,转换为对应的十六进制的值
}
}
}
输入样例: 2020
输出样例: 7E4
输入样例: 200200
输出样例: overflow! 0E08
谢谢支持点赞