sdut oj2131 数据结构实验之栈一:进制转换

题目链接:点击打开链接

数据结构实验之栈一:进制转换

Time Limit: 1000MS Memory limit: 65536K

题目描述

输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出。

输入

第一行输入需要转换的十进制数;
第二行输入R。

输出

输出转换所得的R进制数。

示例输入

1279
8

示例输出

2377

提示

 

代码实现:

#include 
#include 
#include 
using namespace std;
#define stackmax 10000
#define stacknum 10000

typedef struct
{
    int *top;
    int *base;
    int stacksize;
}qstack;

///构造一个空栈
int initstack(qstack &s)
{
    s.base=(int *)malloc(stackmax*sizeof(int));
    if(!s.base)
        exit(0);
    s.top=s.base;
    s.stacksize=stackmax;
    return 0;
}

///创建一个空栈
int Pushstack(qstack &s,int n)
{
    if(s.top-s.base>=s.stacksize)///栈满,给栈追加存储空间
    {
        s.base=(int *)realloc(s.base,(s.stacksize+stacknum)*sizeof(int));
        if(!s.base)
            exit(0);
        s.top=s.base+s.stacksize;
        s.stacksize+=stacknum;
    }
    *s.top++=n;
    return 0;
}

///进制转换,求余
int conversion(qstack &s,int n,int r)
{
    int t;
    while(n)
    {
        t=n%r;
        n=n/r;
        Pushstack(s,t);
    }
    return 0;
}

///出栈
int Putstack(qstack &s)
{
    while(s.top>s.base)
    {
        printf("%d",*(s.top-1));
        s.top--;
    }
    return 0;
}

int main()
{
    qstack s;///定义一个栈
    initstack(s);///初始化栈
    int n,r;
    scanf("%d%d",&n,&r);
    conversion(s,n,r);
    Putstack(s);
    return 0;
}


 

你可能感兴趣的:(栈)