数制转换(栈应用)
- 总时间限制:
- 1000ms 内存限制:
- 65536kB
- 描述
编程实现:输入两个正整数m和r(2<= r <=16),输出与十进制数m相等的r进制数。大于9的数字依次使用大写字母:A B C D E F
要求:使用链栈来实现,否则成绩记0分。
输入- 输入一行,包括两个整数m和r,用空格隔开。1<=m<=9999, 2<=r<=16 输出
- 与十进制整数m相等的r进制数 样例输入
108 16
样例输出6C
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;
typedef int SElemType;
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
}StackNode,*LinkStackPtr;
typedef struct
{
LinkStackPtr top;
int count;
}LinkStack;
Status InitStack(LinkStack *S)
{
S->top = (LinkStackPtr)malloc(sizeof(StackNode));
if(!S->top)
return ERROR;
S->top=NULL;
S->count=0;
return OK;
}
Status StackEmpty(LinkStack S)
{
if (S.count==0)
return TRUE;
else
return FALSE;
}
Status Push(LinkStack *S,SElemType e)
{
LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
s->data=e;
s->next=S->top; /* 把当前的栈顶元素赋值给新结点的直接后继*/
S->top=s; /* 将新的结点 s 赋值给栈顶指针 */
S->count++;
return OK;
}
Status Pop(LinkStack *S,SElemType *e)
{
LinkStackPtr p;
if(StackEmpty(*S))
return ERROR;
*e=S->top->data;
p=S->top; /* 将栈顶结点赋值给 p,见图中③ */
S->top=S->top->next; /* 使得栈顶指针下移一位,指向后一结点 */
free(p); /* 释放结点 p */
S->count--;
return OK;
}
Status visit(SElemType c)
{
printf("%d ",c);
return OK;
}
Status StackTraverse(LinkStack S)
{
LinkStackPtr p;
p=S.top;
while(p)
{
visit(p->data);
p=p->next;
}
printf("\n");
return OK;
}
int main()
{
int i=0;
int m,r;
int e;
scanf("%d%d",&m,&r);
LinkStack s;
InitStack(&s);
while(m>0)
{
int x=m%r;
m=m/r;
Push(&s,x);
}
LinkStackPtr p;
while(!StackEmpty(s))
{
Pop(&s,&e);
if(e<10)
printf("%d",e);
else
{
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;
}
}
}
return 0;
}