c语言栈实现进制转换问题

这里是题目:

利用栈的知识实现任意正的10进制整数到其它进位制的转换程序。

#include  <stdio.h>

#define MAXSIZE 100

typedef int datatype;

typedef struct seqstack

{   datatype a[MAXSIZE];

    int top;

}seqstack;
void init(seqstack *s)

{

   s->top=-1;

}

int empty(seqstack s)

{

   return(s.top==-1?1:0);

}

void conversion(int n,int d)

{……}

我的这个不是用栈来进制转换的,这咋改

#include  <stdio.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct seqstack
{   datatype a[MAXSIZE];
    int top;
}seqstack;
void init(seqstack *s)
{
   s->top=-1;
}
int empty(seqstack s)
{
   return(s.top==-1?1:0);
}
void conversion(int n,int d)
{
    char hex[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    int s,i=0;
    int a[100]={0};
    while (n!= 0){
        int m = n%d;
        a[i++] = m;
        n = n / d;
    }
    for (i=i-1;i>= 0;i--){
        s=a[i];
        printf("%c",hex[s]);}
}
int main()
    
    {
        int n,d;
        printf("请输入一个正的10进制整数:");
        scanf("%d",&n);
        printf("请输入要转换成的进制(2-16):");
        scanf("%d",&d);
        conversion(n,d);
    } 
    


#include  <stdio.h>
#include <iostream.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct seqstack
{   datatype a[MAXSIZE];
    int top;
    //datatype elem;
}seqstack;
void init(seqstack *s)
{
   s->top=-1;
}
int empty(seqstack s)
{
   return(s.top==-1?1:0);
}
void  push(seqstack  *s, datatype  x)
{  if(s->top==MAXSIZE-1)
   {  printf("溢出"); exit(1); }
   else
   {  s->top++; s->a[s->top]=x; }
}
datatype  pop(seqstack  *s )
{   datatype  x;
    if(s->top!=-1)
    {  x=s->a[s->top]; s->top--; return  x; }
    else
    {  printf("栈为空!!! "); exit(1); }
}
datatype getTop(seqstack *s)
{
    if(s->top!=-1)
    return s->a[s->top];
    else
    {
        printf("stack is empty!\n");
        exit(1); 
    }
}
void conversion(int num_hex_ten,int hex_after)
{
    seqstack *s;
    int x;
    init(s);
    while( num_hex_ten )
    {
        push(s, num_hex_ten % hex_after);
        num_hex_ten /= hex_after;
    }
    
    printf("转换成目的进制后:");
    while(s->top!=-1)
    {
        x = getTop(s);
        pop(s);
        if(x > 9){
            printf("%c",x+87);
        }
        else{
            printf("%d",x);
        }
    }
    printf("\n");
    
}
int main()
{
    int n,d;
        printf("请输入一个正的10进制整数:");
        scanf("%d",&n);
        printf("请输入要转换成的进制(2-16):");
        scanf("%d",&d);
        conversion(n,d);
}

这个是用栈的,但运行有问题,咋改