#include<iostream>
#include<assert.h>
using namespace std ;
template<class T>
class Stack
{
public:
Stack( int stack_size = 0 ) ;
virtual ~Stack( void ) ;
bool IsEmpty( void ) const ;
bool IsFull( void ) const ;
T& Top( void ) const ;
bool Push( T Obj ) ;
bool Pop( void ) ;
int Size( void ) ;
void Clear( void ) ;
private:
int stack_capacity ;
int stack_top ;
T* data ;
};
template<class T>
Stack<T>::Stack( int stack_size = 0 )
{
assert( stack_size >= 0 ) ;
stack_top = -1 ;
data = new T[ stack_capacity = stack_size ] ;
}
template<class T>
Stack<T>::~Stack( void )
{
if( data != NULL )
{
delete data ;
data = NULL ;
stack_top = -1 ;
stack_capacity = 0 ;
}
}
template<class T>
bool Stack<T>::IsEmpty( void ) const
{
return stack_top == -1 ;
}
template<class T>
bool Stack<T>::IsFull( void ) const
{
return stack_top == stack_capacity - 1 ;
}
template<class T>
T& Stack<T>::Top( void ) const
{
assert( this->IsEmpty() != true ) ;
return data[ stack_top ] ; //堆栈不为空返回站顶元素
}
template<class T>
bool Stack<T>::Push( T Obj )
{
assert( this->IsFull() != true ) ; //堆栈未满时才可以进行数据压栈
data[ ++stack_top ] = Obj ;
return true ;
}
template<class T>
bool Stack<T>::Pop( void )
{
assert( this->IsEmpty() != true ) ; //堆栈不为空时才能使数据出栈
stack_top--;
return true ;
}
template<class T>
int Stack<T>::Size( void )
{
return this->stack_top + 1 ;
}
template<class T>
void Stack<T>::Clear( void )
{
if( data != NULL )
{
delete data ;
data = NULL ;
}
stack_top = -1 ;
stack_capacity = 0 ;
}//app.cpp#include"stack.h"
int main()
{
int stack_size = 0 ;
int decimal_number , temp_number ;
int n ;
cout<<"Please input the decimal number:"<<endl;
cin>>decimal_number ;
cout<<"Please input the n bit you want to shift:"<<endl;
cin>>n ;
//计算十进制转成n进制的位数
temp_number = decimal_number ;
while( temp_number != 0 )
{
temp_number /= n ;
++stack_size ;
}
Stack<int> stack( stack_size ) ;
temp_number = decimal_number ;
while( temp_number != 0 )
{
stack.Push( temp_number % n ) ;
temp_number /= n ;
}
while( stack.IsEmpty( ) == false )
{
cout<<stack.Top() ;
stack.Pop() ;
}
cout<<endl;
system("pause") ;
return 0;
}