我也不会
题主有答案了吗。。。我也有这题,咋写都不对
/***链栈实现数制的转换***/
#include <bits/stdc++.h>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char Status;
typedef struct SNode {
char data;
struct SNode *next;
} SNode, *LinkStack;
Status InitStack(LinkStack &S) {
S = NULL;
return OK;
}
bool StackEmpty(LinkStack S) {
if (!S)
return true;
return false;
}
char IntToChar(int x)
{
if (x < 10)
{
return x + '0';
}
else
{
return x - 10 + 'a';
}
}
Status Push(LinkStack &S,char e) {
LinkStack p;
p = new SNode;
if (!p) {
return OVERFLOW;
}
p->data = e;
p->next = S;
S = p;
return OK;
}
Status Pop(LinkStack &S, char &e) {
LinkStack p;
if (!S)
return ERROR;
e = S->data;
p = S;
S = S->next;
delete p;
return OK;
}
//算法3.20 数制的转换(链栈实现)
void conversion(int N,int K) {//对于任意一个非负十进制数,打印输出与其等值的K进制数
int m;
char e;
LinkStack S;
InitStack(S); //初始化空栈S
while (N) //当N非零时,循环
{
m=N % K;
Push(S,IntToChar(m)); //把N与K求余得到的K进制数压入栈S
N = N / K; //N更新为N与K的商
}
while (!StackEmpty(S)) //当栈S非空时,循环
{
Pop(S, e); //弹出栈顶元素e
cout << e; //输出e
}
}
int main() {//对于输入的任意一个非负十进制数,打印输出与其等值的K进制数
int n,K,i;
while(true){
cout<<"请选择要进行的操作:【1】:进行进制转换,【2】:退出"<<endl;
cin>>i;
if(i==1){
cout << "输入一个非负十进制数:" << endl;
cin >> n;
cout << "输入一个一个数作为转换数制:" <<endl;
cin >> K;
conversion(n,K);
cout<<endl;
}
else(i==2);{
break;
}
}
return 0;
}