//顺序静态存储
#include <bits/stdc++.h>
#include<math.h>
using namespace std;
#define MaxSize 1000
#define Overflow 0; //溢出部分声明
#define sucessful 1; //成功声明
#define error 0; //失败声明
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //定义栈顶
} Stack, &SqStack;
//这部分可看成: typedf struct SqStack和typedf struct SqStack*;
//初始化栈操作:
void InitSqStack(SqStack st)
{
st.top = -1; //建立空栈
}
//销毁栈
void DestroySqStack(SqStack st) {} //这里系统会自动为它释放空间
//判断栈空条件
int SqStackNull(SqStack st)
{
if (st.top == -1)
{
return sucessful;
}
else
return error;
}
//进栈操作
int pushSqStack(SqStack st, ElemType x)
{
if (st.top == MaxSize - 1)
{
return Overflow;
}
else
{
st.top++;
st.data[st.top] = x;
return sucessful;
}
}
//出栈操作
int PopSqStack(SqStack st, ElemType &x) //这里因为x要进行输出x,所以采用引用类型
{
//首先进行判断是否为空栈,如果是空栈,则取不出来
if (st.top == -1)
{
return error;
}
else
{
x = st.data[st.top];
st.top--;
return sucessful;
}
}
//编写进制转换函数
void translate(int d, int m) //这里 d:输入元素的元素(被除数) ,m用来输入要转换的进制基数
{
Stack st;
char flag;//转换16进制时,展示字符格式
int x,mod,n;
InitSqStack(st); //初始化
int i = 0;
while(d!=0){
if(d>0){//判断输入的数据是否大于零,如果不大于,转换为整数
mod=d%m;
flag=(mod>=0&&mod<=9)?(char)(mod+'0'):(char)(mod-10+'A'); //十六进制:
pushSqStack(st,flag);
d=d/m;
}
}
while(!SqStackNull(st)){
PopSqStack(st,flag);
cout<<flag;
}
DestroySqStack(st);
//
}
int main(){
int d,m;
char str[MaxSize];
cout<<"输入一个正整数:"<<endl;
cin>>d;
cout<<"输入您要转换的进制:"<<endl;
cin>>m;//输出结果
translate(d,m);
}
STL
#include <bits/stdc++.h>
#include <stack>
using namespace std;
int main()
{
stack<int> jinzhi;
int base, target, mod;
char flag;
cin >> base >> target;
while (base != 0)
{
if (base > 0)
{
mod = base % target;
jinzhi.push(mod);
base /= target;
}
}
while (!jinzhi.empty())
{
cout << jinzhi.top() << endl;
jinzhi.pop();
}
}
效果图: