【项目四 - 数制转换】
问题描述:把十进制的整数转换为二至九之间的任一进制数输出。请利用栈设计算法,并实现程序。
输入描述:数字与进制
程序输出:输出转换结果
程序及代码:
#include <stdio.h>
#include <malloc.h>
typedef int Elemtype;
typedef struct node
{
int data;
struct node *next;
} LiStack;
void InitStack(LiStack *&l)
{
l=(LiStack *)malloc(sizeof(LiStack));
l->next=NULL;
}
void DestroyStack(LiStack *&l)
{
LiStack *pre=l,*p=l->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=p->next;
}
free(pre);
}
bool StackEmpty(LiStack *l)
{
return (l->next==NULL);
}
void Push(LiStack *&l,Elemtype e)
{
LiStack *p;
p=(LiStack *)malloc(sizeof(LiStack));
p->data=e;
p->next=l->next;
l->next=p;
}
bool Pop(LiStack *&l,Elemtype &e)
{
LiStack *p;
if(l->next==NULL)
return false;
p=l->next;
e=p->data;
l->next=p->next;
free(p);
printf("%d",e);
return true;
}
bool GetTop(LiStack *l,Elemtype &e)
{
if(l->next==NULL)
return false;
e=l->next->data;
return true;
}
void NumReversal(int n,int r)
{
LiStack *s;
InitStack(s);
Elemtype e;
while(n>0)
{
e=n%r;
Push(s,e);
n/=r;
}
while(!StackEmpty(s))
Pop(s,e);
printf("\n");
}
int main()
{
int n,r;
while(scanf("%d %d",&n,&r)!=EOF)
NumReversal(n,r);
return 0;
}
运行结果: