#include<iostream>
#include<cstdlib>
using namespace std;
template<class T>
class LinkNode{
public:
T data;
LinkNode<T> *pNext;
LinkNode(T data= 0){
this->data = data;
this->pNext = NULL;
}
};
template<class T>
class LinkStack{
private:
LinkNode<T> *top;
int size;
public:
LinkStack(int size = 0){
this->size = 0;
this->top = NULL;
}
void push(T data){ //入栈
LinkNode<T> *x = new LinkNode<T>(data);
if(top == NULL)
top = x;
else{
x->pNext = top;
top = x;
}
size += 1;
}
void clear(); //清空栈
void pop(T& x); //出栈
void show(); //输出值
void change(int i,int target); //数制转换
};
template<class T>
void LinkStack<T> :: clear(){
LinkNode<T> *p;
while(top!= NULL){
p = top;
top = top->pNext;
delete p;
}
}
template<class T>
void LinkStack<T> :: pop(T& x){
if(top!= NULL){
x = top->data;
LinkNode<T> *p = top;
top = top->pNext;
delete p;
size -= 1;
}
else
cout << "栈空,无法出栈!" << endl;
}
template<class T>
void LinkStack<T> :: show(){
LinkNode<T> *p = top;
for(;p!= NULL;p = p->pNext)
cout << p->data;
}
template<class T>
void LinkStack<T> :: change(int i,int target){
clear();
if(i == 0)
push(0);
while(i != 0){
push(i%target);
i = i/target;
}
cout << "转化后的数为:";
show();
cout << endl << endl << endl;
}
int main(){
LinkNode<int> node;
LinkStack<int> st(0);
int ten,target = 1;
while(1){
cout << "请输入要转化的十进制数:";
cin >> ten;
cout << "请输入目标数制(2~9,输入0结束):";
cin >> target;
if(target > 1&&target <= 9)
st.change(ten,target);
if(target == 0)
exit(0);
if(target<0 || target == 1 || target >9)
cout << "无效,请重新输入" << endl <<endl;
}
return 0;
}