利用栈(以顺序栈作存储结构)实现进制转换。给定一个十进制整数,编程将该数以二进制形式输出。

![img](

"=600 #left"
问题与标题保持一致

我也不会

题主有答案了吗。。。我也有这题,咋写都不对


/***链栈实现数制的转换***/

#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;
}