进制转换

来源:互联网 发布:引入js文件加上随机数 编辑:程序博客网 时间:2024/05/20 05:26

题目描述

输入一个十进制数N,将它转换成R进制数输出。

输入

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R != 10)。

输出

为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。

示例输入

7 223 12-4 3

示例输出

1111B-11
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define STACKMAXSIZE 100#define STACKTNCREATE 10#define OK 1#define OVERFLOR -1#define ERROR 0typedef int SET;typedef struct{    SET *top;    SET *base;    int stacksize;}Sqstack;int Initstack(Sqstack &S){    S.base=(SET*)malloc(STACKMAXSIZE*sizeof(SET));    if(!S.base) exit (OVERFLOR);    S.top=S.base;    S.stacksize=STACKMAXSIZE;    return OK;}int Push (Sqstack &S,SET e){    if(S.top-S.base>=S.stacksize)    {        /*这条语句执行后,可能得到的空间,是重新分配的(基地址会变),也可能是在原来的基础扩充*/        S.base=(SET *)realloc(S.base,(S.stacksize+STACKTNCREATE)*sizeof(SET));//增加一个STACKCREATE大小SET类型的内存单元到栈S的尾部        if(!S.base) exit (OVERFLOR);        S.top=S.base+S.stacksize;//棧顶指针指向正确位置        S.stacksize=S.stacksize+STACKTNCREATE;    }    *S.top=e;    S.top++;    return OK;}/*输出栈顶元素*/int Pop(Sqstack &S,SET &e){    if(S.base==S.top)return ERROR;    e=*--S.top;    return OK;}/*销毁棧*/void DestroyStack(Sqstack &S){    S.base=NULL;}int main(){    long N,T;    int R,e;    Sqstack S;    while(~scanf("%ld %d",&N,&R))    {        T=N;        Initstack(S);        if(N<0)            N=-N;        while(N)        {            Push(S,N%R);            N=N/R;        }        if(T<0)printf("-");        while(S.base!=S.top)        {            Pop(S,e);            if(e>=0&&e<=9)printf("%d",e);            if(e==10)printf("A");            if(e==11)printf("B");            if(e==12)printf("C");            if(e==13)printf("D");            if(e==14)printf("E");            if(e==15)printf("F");        }        printf("\n");        DestroyStack(S);    }}

0 0