#include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100 typedef int Status; typedef struct Stack { int *top; int *base; int stacksize; }SqStack; Status InitStack(SqStack &S)//初始化空栈 { //代码开始 S.base=new int[MAXSIZE]; if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=MAXSIZE; //代码结束 return OK; } bool StackEmpty(SqStack S)//判断栈空 { //代码开始 if(S.top==S.base) return 0; //代码结束 } Status Push(SqStack &S,int e)//进栈 { //代码开始 if(S.top-S.base==S.stacksize) return 0; *S.top++=e; return 1; //代码结束 return OK; } Status Pop(SqStack &S,int &e)//出栈 { //代码开始 e=*--S.top; return 1; //代码结束 return OK; } void conversion(int n,int m) {//对于任意一个非负十进制数n,打印输出与其等值的m进制数 int e; SqStack S; InitStack(S); //初始化空栈S //代码开始 while(n) { Push(S,n%m); n=n/m; if(n==0) break; } //代码结束 while (!StackEmpty(S)) //当栈S非空时,循环 { Pop(S, e); //弹出栈顶元素e cout << e; //输出e } } int main() { int n,m;//n是一个非负十进制数,m是要转换的进制 cin >> n>>m; conversion(n,m); return OK; }
时间: 2024-03-15 13:44:21 浏览: 157
这段代码实现了将一个非负十进制数 n 转换为 m 进制数,并输出转换后的结果。代码中用到了一个栈来辅助实现进制转换,具体实现步骤如下:
1. 定义一个栈结构体,包括栈顶指针、栈底指针和栈的大小。
2. 初始化栈,为栈分配内存空间,并将栈顶指针和栈底指针指向同一个位置。
3. 判断栈是否为空,可以通过判断栈顶指针和栈底指针是否相等来实现。
4. 入栈操作,将元素压入栈顶。
5. 出栈操作,取出栈顶元素并将栈顶指针向下移动。
6. 实现进制转换的具体过程,将十进制数 n 不断除以转换的进制 m,将余数入栈,直到商为0为止。
7. 循环弹出栈中的元素,并输出转换后的进制数。
下面是这段代码的注释版:
```c++
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef struct Stack {
int *top;
int *base;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)//初始化空栈
{
//代码开始
S.base = new int[MAXSIZE];
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
//代码结束
return OK;
}
bool StackEmpty(SqStack S)//判断栈空
{
//代码开始
if (S.top == S.base) return 0;
//代码结束
}
Status Push(SqStack &S, int e)//进栈
{
//代码开始
if (S.top - S.base == S.stacksize) return 0;
*S.top++ = e;
return 1;
//代码结束
return OK;
}
Status Pop(SqStack &S, int &e)//出栈
{
//代码开始
e = *--S.top;
return 1;
//代码结束
return OK;
}
void conversion(int n, int m) {//对于任意一个非负十进制数n,打印输出与其等值的m进制数
int e;
SqStack S;
InitStack(S); //初始化空栈S
//代码开始
while (n) {
Push(S, n % m);
n = n / m;
if (n == 0)
break;
}
//代码结束
while (!StackEmpty(S)) //当栈S非空时,循环
{
Pop(S, e); //弹出栈顶元素e
cout << e; //输出e
}
}
int main() {
int n, m;//n是一个非负十进制数,m是要转换的进制
cin >> n >> m;
conversion(n, m);
return OK;
}
```
这个代码实现了输入非负十进制数 n 和需要转换的进制数 m,输出转换后的进制数。
阅读全文