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

来源:互联网 发布:lol淘宝cdk是真的吗 编辑:程序博客网 时间:2024/06/05 17:28

Problem Description

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

Input

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

Output

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

Example Input

12798

Example Output

2377
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define STACKINITSIZE 100#define STACKINCREMENT 10#define OVERFLOW -2#define ERROR -1#define OK 1typedef int SElemType ;typedef int Statu;typedef struct node{    SElemType * base;    SElemType * top;    int stacksize;} SqStack;void Conversion(int n, int r);Statu InitList(SqStack &S);Statu Push(SqStack &S, SElemType e);Statu Pop(SqStack &S, SElemType &e);int main(){    int n, r;    scanf("%d%d", &n, &r);    if(n < 0)        exit(OVERFLOW);    Conversion(n, r);    return 0;}Statu InitStack(SqStack &S){    S.base =(SElemType *)malloc(STACKINITSIZE*sizeof(SElemType));    if(!S.base)        exit(OVERFLOW);    S.top = S.base;    S.stacksize = STACKINITSIZE;    return OK;}Statu Push(SqStack &S, SElemType e){    if(S.top - S.base >= S.stacksize)    {        S.base =(SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));        if(!S.base)            exit(OVERFLOW);        S.top = S.base + S.stacksize;        S.stacksize += STACKINCREMENT;    }    * S.top++ = e;    return OK;}Statu Pop(SqStack &S, SElemType &e){    if(S.top == S.base)        return -1;    e = * --S.top;    return OK;}void Conversion(int n, int r){    int i, j = 0;    SqStack S;    InitStack(S);    if(n == 0)        printf("0\n");    else    {        while(n != 0)        {            i = n % r;            n /= r;            Push(S, i);            j++;        }        while(j--)        {            Pop(S, i);            printf("%d", i);        }        printf("\n");    }}

阅读全文
0 0
原创粉丝点击