今天在C++论坛里面看到有关于此问题的讨论,自己也写了一个函数,用于实现所述功能。
相当于将此整数从低到高按位输出。如果将CONVERTER改为其他值,可实现十进制和其他进制的转换。
关于这部分内容,在数据结构书中有讨论
代码如下:
#include <stdlib.h>
#include <malloc.h>
#include <iostream.h>
#define MAXSTEP 10 //栈满时的增长步长
#define CONVERTER 10 //如果改为其他值,可实现十进制和其他进制的转换
template <typename T>
class stack
{
public:
stack();
~stack(){ free(v); size = 0;}
void Push(T t);
void Pop(T& t);
int Size()
{
return size;
}
private:
T* v; //保存栈内的值
int size; //栈中存储值的个数
};
template <typename T>
stack<T>::stack()
{
v = new T[MAXSTEP];
if(NULL == v)
{
cout<<"No memory"<<endl;
return;
}
size = 0;
}
template<typename T>
void stack<T>::Push(T t)
{
if((size!=0) && ((size%MAXSTEP)==0))
{
//重新分配新的空间
v = (T*)realloc(v, sizeof(T)*(MAXSTEP));
}
v[size++] = t;
}
template <typename T>
void stack<T>::Pop(T& t)
{
if(size == 0)
{
return;
}
t = v[--size];
}
void main()
{
int a = 0; //保存输入的整数
int* c = NULL; //保存输出结果
int len = 0; //动态分配数组大小
stack<int> s;
cout<<"Please input a integer:"<<endl;
cin>>a;
while(a !=0)
{
s.Push(a%CONVERTER);
a = a/CONVERTER;
}
len = s.Size();
c = new int[len]; //[]表示分配一个数组,()表示一个int初值
if(NULL == c)
{
cout<<"No memory!"<<endl;
return;
}
cout<<"Result:"<<endl;
for(int i=0; i<len; i++)
{
s.Pop(c[i]);
cout<<"c["<<i<<"]:"<<c[i]<<endl;
}
delete [] c;
}