可以将十进制的数字转换成2~9进制,转换不了会提示。也可以自己拓展,将其他进制的数字转换成十进制的。
结果如图所示。
main.cpp
#include"TranStack.h"
#include"TranStack.cpp"
#include<iostream>
using namespace std;
int main(){
int n,m,a,b;
cout<<"\n\t请输入一个十进制的整数:";
cin>>n;
a=n;
cout<<"\t转换为几进制(请输入2~9的阿拉伯数字):";
cin>>m;
TransStack t; //建立对象
try{ //异常处理
if(m<2||m>9) throw"\n\t转换进制异常!\n";
}catch(char *p){
cout<<p;
}
if(m>1&&m<10){
for(;;){
b=a%m; //取余数
a=a/m; //取商
t.push(b);
if(!a) break;
}
try{
cout<<"\n\t"<<n<<"转换为"<<m<<"进制为:";
for(;;){
cout<<t.pop();
}
}catch(...){
cout<<"\n\n\t\t";
}
}
return 0;
}
TranStack.cpp
#include"TranStack.h"
#include<iostream>
using namespace std;
TransStack::TransStack(){top=NULL;}
TransStack::~TransStack(){}
void TransStack::push(int a){
Node *s=new Node;
s->data=a;
s->next=top;
top=s; //将接点s插在栈顶
}
int TransStack::pop(){
if(top==NULL) throw"\n\t\t下溢!\n\t\t";
Node *p=top;
int x=p->data; //暂存栈顶元素
top=p->next; //将栈顶结点摘链
delete p;
return x;
}
TranStack.h
#ifndef TRANSTACK_H
#define TRANSTACK_H
#include<iostream>
using namespace std;
struct Node{ //定义节点
int data;
Node *next;
};
class TransStack{
private:
Node *top;//栈顶指针即链栈的头指针
public:
TransStack(); //构造函数
~TransStack(); //析构函数
void push(int a); //入栈操作,将元素a入栈
int pop(); //出栈操作,将栈顶元素出栈
};
#endif