数据结构c语言版问题描述: 实现将一个十进制的正整数转化为十六进制的算法。找不出哪里错,求帮助~

#include<malloc.h>#include<stdio.h>#include<stdlib.h>#defineMAXSIZE256typedefintelemt... #include <malloc.h>
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 256
typedef int elemtype;
typedef struct
{
elemtype data[MAXSIZE];
int top;
}SqStack;
void initStack(SqStack *s)
{
s=(SqStack*)malloc(sizeof(SqStack));
s->top=-1;
}
int empty(SqStack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
int push(SqStack *s,elemtype x)
{
if(s->top==MAXSIZE-1)
{
return 0;
}
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
int pop(SqStack *s)
{
elemtype *p;
if(empty(s)==1)
{
return 0;
}
else
{
*p=s->data[s->top];
s->top--;
return 1;
}
}

int main(void)
{
SqStack *s;
int N,x;
int count;
int n;
char ch;
while(scanf("%d",&N))
{
if(N==0)
break;

for(count=0;count<N;count++)
{

s=(SqStack*)malloc(sizeof(SqStack));
initStack(s);

scanf("%d",&x);
while(x)
{
push(s,(x%16));
x=x/16;
}
while(!empty(s))
{
n=pop(s);
if(n<=9)
printf("%d",n);
else
{
ch=(char)(n+55);
printf("%c",ch);
}
}

}
}

}
展开
 我来答
希生城h
2016-10-26 · 超过65用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:64.9万
展开全部
#include <stdio.h>
#define MAXSIZE 256
int Stack[MAXSIZE];
int top = -1;
bool isempty(){
return top == -1;
}
void push(int d){
Stack[++top] = d;
}
int pop(){
return Stack[top--];
}
char dec2hex(int x){
return (x>9?'a':'0') + (x%10);
}
int main(){
int x;
scanf("%d", &x);
//除16取余
while(x){
push(x%16);
x /= 16;
}
while(!isempty())
putchar(dec2hex(pop()));
}

存储结构就是int 数组 Stack
算法就是每次输入一个数字x,进行下面的循环:
1. x 不为零继续,为零则跳出
2. 每次将x 余16 的结果入栈(实际上是将x 的16 进制的第i 位入栈,i 表示循环次数)
3. x = x/16.(将x 自除以16)转至1
这是16 进制的存储过程,输出就是先读出(dec2hex() 函数完成)在打印出来:

顺序从栈顶到栈底分别是这个数字(16 进制下的)高位到低位。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式