R7-1 数据结构实验一 进制转换分数 35 全屏浏览题目 切换布局 利用栈(以顺序栈作存储结构)实现进制转换。给定一个十进制整数x和要转换的进制m,编程将x以m进制形式输出。 顺序栈的类型定义: #define MAXSIZE 100 // MAXSIZE为最大数据元素数目 typedef int ElemType; typedef struct { ElemType *base; ElemType *top; }SqStack; 输入格式: 第一行输入一个十进制整数x。 第二行输入一个整数m(2、8或16), 代表要转换成m进制。 输出格式: 输出转换后的进制数。 输入样例: 15 2 输出样例: 1111 输入样例: 27 16 输出样例: 1B 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
时间: 2024-02-22 11:55:57 浏览: 97
MCS-51单片机实用子程序库(二).
下面是使用顺序栈实现进制转换的 C++ 代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
#define MAXSIZE 100 // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct {
ElemType *base;
ElemType *top;
}SqStack;
// 初始化栈
void InitStack(SqStack &S) {
S.base = new ElemType[MAXSIZE];
S.top = S.base;
}
// 入栈
void Push(SqStack &S, ElemType x) {
*(S.top++) = x;
}
// 判断栈是否为空
bool IsEmpty(SqStack &S) {
return S.top == S.base;
}
// 出栈
ElemType Pop(SqStack &S) {
if (IsEmpty(S)) {
return -1; // 表示栈为空
}
return *(--S.top);
}
int main() {
int x, m;
cin >> x >> m;
SqStack S;
InitStack(S);
int d; // 余数
while (x) {
d = x % m;
Push(S, d);
x /= m;
}
while (!IsEmpty(S)) {
int d = Pop(S);
if (d < 10) {
cout << d;
} else {
cout << (char)(d - 10 + 'A');
}
}
cout << endl;
return 0;
}
```
这里使用了一个自定义的顺序栈,分别实现了栈的初始化、入栈、出栈和判断栈是否为空的操作。在主函数中,先输入要转换的十进制整数和目标进制,然后利用栈不断求余并入栈,最后依次出栈并输出结果,其中需要注意的是,当余数大于等于10时,需要将其转换为相应的十六进制字符。
阅读全文