回复 楼主 tanghf1014
//利用栈完成数制转换。改进算法使得能够完成十进制数向任意其他进制数的转换(如:十→八或十→十六)。
#include
#include
#define MaxSize 16
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;
}SqStack;
//初始化栈
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
//销毁栈
void ClearStack(SqStack *&s)
{
free(s);
}
//进栈
int Push(SqStack *&s,ElemType e)
{
if(s->top==MaxSize-1)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
//出栈
int Pop(SqStack *&s,ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}
//取栈顶元素
int GetTop(SqStack *s,ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
return 1;
}
//显示栈中元素
void DispStack(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
cout<data[i];
}
//十六进制判断
void Judge(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
{
if(s->data[i]==10) cout<
else if(s->data[i]==11) cout<
else if(s->data[i]==12) cout<
else if(s->data[i]==13) cout<
else if(s->data[i]==14) cout<
else if(s->data[i]==15) cout<
else cout<data[i];
}
}
void main()
{
SqStack *s;
InitStack(s);
int i,t,j,m;//要转换的进制,j要被转换的数
cout<
cin>>j;
cout<
cin>>i;
if(i==2||i==8)
{
if(j<0)
{ m=-j;
while(m!=0)
{
t=m%i;
Push(s,t);
m=m/i;
}
Push(s,1);
}
else if(j>0)
{
while(j!=0)
{
t=j%i;
Push(s,t);
j=j/i;
}
Push(s,0);
}
cout<
DispStack(s);
ClearStack(s);
}
if(i==16)
{
if(j<0)
{ m=-j;
while(m!=0)
{
t=m%i;
Push(s,t);
m=m/i;
}
Push(s,1);
}
else if(j>0)
{
while(j!=0)
{
t=j%i;
Push(s,t);
j=j/i;
}
Push(s,0);
}
cout<
Judge(s);
ClearStack(s);
}
cout<
}