说明:代码中我为了测试的舒服一点,使用了long long int数据类型,可以为int类型但太长的话会报错,尤其是10进制转2进制时。
(好像参考了别人的某篇文章,记不清了,侵权的话联系我删除哈)
主要思想就是把10进制数依次除n放入栈,再乘10出栈,达到一种打印出n进制数的效果。
#include <iostream>
using namespace std;
#define maxlength 100
typedef long long int Elementtype;
struct STACK {
int top;
Elementtype elements[maxlength];
};
void MakeNULL(STACK &S) {
S.top = maxlength;
}
bool Empty(STACK S) {
if (S.top >= maxlength)
return true;
else
return false;
}
Elementtype Top(STACK S) { //返回栈顶元素
if (Empty(S))
return false;
else
return (S.elements[S.top]);
}
void Pop(STACK &S) {
if (Empty(S))
cout << "Stack is empty." << endl;
else
S.top = S.top + 1;
}
void Push(Elementtype x, STACK &S) {
if (S.top == 0)
cout << "Stack is full." << endl;
else {
S.top = S.top - 1;
S.elements[S.top] = x;
}
}
//进制转换进栈
void turn(int n, STACK &S, int m) {
while (n) {
Push(n % m, S);
n /= m;
}
}
//打印转换后的m进制数
void print(STACK &S) {
while ( !Empty(S)) {
if (S.elements[S.top] >= 10) {
cout << "`";
cout << S.elements[S.top];
cout << "`";
Pop(S);
} else {
cout << S.elements[S.top];
Pop(S);
}
}
cout << endl;
}
int main() {
long long int n, m;
cout << "请输入你想要转换的数字:";
cin >> n;
cout << "请输入你想要转换为m进制的数:";
cin >> m;
STACK S;
MakeNULL(S);
long long int result;
turn(n, S, m);
//int size = maxlength - S.top;
cout << n << "转化为" << m << "进制后为:" << endl;
print(S);
return 0;
}
主要参考: 《数据结构与算法》(第五版)张岩
《数据结构考研复习指导》(王道)