#include<stdio.h>
#include<malloc.h>
/*
栈
*/
#define SIZE 10
typedef char Type;
typedef struct stack
{
Type *data; // 顺序栈存储单元首地址
int capacity; //容量
int top; //栈顶
}SeqStack;
void InitStack(SeqStack *ss);//c创建栈
void Change(SeqStack *ss,int n,int m); //相应的进制转换
bool IsFull(SeqStack *ss);//判断栈满
void Print(SeqStack *ss);//输出
void Push(SeqStack *ss,Type value);//入栈
int main()
{
SeqStack ss;
InitStack(&ss);
int x,y;
printf("请输入转换的数字:\n");
scanf("%d",&x);
printf("请输入转换的进制:");
scanf("%d",&y);
Change(&ss,x,y);
Print(&ss);
}
void Change(SeqStack *ss,int n,int m)
{
int r; //余数
char c; //转换后余数对应的字符
while(n != 0)
{
r = n % m;
if(r < 10)
{
c = r + '0';
}
else
{
c = r - 10 + 'a';
}
Push(ss,c);
n = n / m;
}
}
void InitStack(SeqStack *ss)//创建栈
{
ss->capacity = SIZE;//容量
//首元地址
ss->data = (Type*)malloc(sizeof(Type)*ss->capacity);
ss->top = 0;//栈顶指针
}
bool IsFull(SeqStack *ss)//判断栈满
{
return ss->top == ss->capacity?true:false;
}
void Print(SeqStack *ss)//输出站内元素
{
for(int i = ss->top-1;i>=0;--i)
printf("%c",ss->data[i]);
printf("\n");
}
void Push(SeqStack *ss,Type value)//入栈
{
if(IsFull(ss))
{
printf("栈已满,无法入栈\n");
return;
}
ss->data[ss->top] = value;
ss->top++;
}