关于int型整数按逆序存入数组中的问题(也即十进制数和其他类型数据的转换问题)

来源:互联网 发布:中国气象数据共享网 编辑:程序博客网 时间:2024/06/14 20:04

今天在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;
}

 

原创粉丝点击