#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int StackElemType;
typedef struct
{
StackElemType *base;
StackElemType *top;
int stacksize;
}SqStack;
void InitStack(SqStack *S)
{
S->base=(StackElemType *)malloc( Stack_Init_Size *sizeof(StackElemType));
if(!S->base)exit(0);
S->top=S->base;
S->stacksize=Stack_Init_Size;
}
void Push(SqStack *S,StackElemType e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(StackElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(StackElemType));
if(!S->base)exit(0);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*S->top++=e;
}
int Pop(SqStack *S,StackElemType e)
{
if(S->top==S->base)return 0;
e=*--S->top;
return e;
}
int GetTop(SqStack *S,StackElemType e)
{
if(S->top==S->base) return 0;
e=*(S->top-1);
return e;
}
int StackEmpty(SqStack *S)
{
if(S->top==S->base)
return 1;
else
return 0;
}
void conversion(SqStack *S,int n,int r)
{
printf("十进制正整数%d转换为%d进制为:/n",n,r);
while(n)
{
Push(S,n%r);
n=n/r;
}
while(!StackEmpty(S))
{
StackElemType e=Pop(S,e);
switch(e)
{
case 10: printf("A");
break;
case 11: printf("B");
break;
case 12: printf("C");
break;
case 13: printf("D");
break;
case 14: printf("E");
break;
case 15: printf("F");
break;
default: printf("%d",e);
}
}
printf("/n");
}
void main()
{
int n,r;
SqStack S;
InitStack(&S);
printf("Input the Positive Integer:/n");
scanf("%d",&n);
printf("Input the coversion type:/n");
scanf("%d",&r);
conversion(&S,n,r);
}