#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define True 1
#define False 0
#define OVERFLOW -1
typedef int Status;
//栈的存储结构
typedef struct
{
int *base;
int *top;
int stacksize;
}Sqstack;
//构建空栈
Status InitStack(Sqstack *s)
{
s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s->base) exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
//压栈操作
Status Push(Sqstack *s, int e)
{
if(s->top-s->base>=s->stacksize)//若栈满,追加存储空间
{
s->base=(int *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
exit(OVERFLOW);
s->top=s->base+s->stacksize; // 将栈顶指针指向当前栈顶元素的上方
s->stacksize+=STACKINCREMENT; //增加栈已分配的存储空间
}
*(s->top++)=e;
return OK;
}
//出栈操作
Status Pop(Sqstack *s,int *e)
{
if(s->top==s->base) //如果为空栈则返回错误
return ERROR;
*e=*(--(s->top)); //取栈顶元素
return OK;
}
Status StackEmpty(Sqstack *s)
{
if(s->top==s->base)
return True;
else
return False;
}
Status ClearSqstack(Sqstack *s)
{
s->top=s->base;
return OK;
}
void Conversion(Sqstack *s,int N,int b)
{
char c;
int e;
while(N)
{
Push(s,N%b);
N=N/b;
}
while(!StackEmpty(s))
{
Pop(s,&e);
if(e>9&&e<16)
{
switch(e)
{
case 10:c='A';printf("%c",c);break;
case 11:c='B';printf("%c",c);break;
case 12:c='C';printf("%c",c);break;
case 13:c='D';printf("%c",c);break;
case 14:c='E';printf("%c",c);break;
case 15:c='F';printf("%c",c);break;
default:break;
}
}
else
printf("%d",e);
}
printf("\n");
}
int main()
{
int N;
int b;
char c;
Sqstack s;
InitStack(&s);
printf(" 1.十进制的转化\n 0.退出\n");
while(c!='0')
{
scanf("%c",&c);
switch(c)
{
case '1':
printf("请输入要转化的数据:");
scanf("%d",&N);
printf("请输入要转化的进制:");
scanf("%d",&b);
Conversion(&s,N,b);
ClearSqstack(&s);
break;
case '0':
exit(0);
default:
break;
}
}
system("pause");
}
十进制转化为其他进制
若取余后数字>=10 &&<=15
则10对应A。。。15对应F