进制转换
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入一个十进制数N,将它转换成R进制数输出。
输入
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
输出
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
示例输入
7 2 23 12 -4 3
示例输出
111 1B -11
</pre><pre name="code" class="cpp">#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxsize 1024
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int Length;
} SQ;
int Init(SQ &S)
{
S.base=(ElemType *)malloc(maxsize*sizeof(ElemType));
if(!S.base) exit(-1);
S.top=S.base;
S.Length=maxsize;
return 1;
}
int push(SQ &S,int e)
{
*S.top++=e;
return 1;
}
int pop(SQ &S,ElemType &e)
{
e=*(--S.top);
return 1;
}
int com_de(char ch)
{
if(ch=='+'||ch=='-') return 1;
else if(ch=='*'||ch=='/') return 2;
else if(ch=='(') return 3;
else if(ch==')') return 4;
}
int get(SQ &S)
{
char e;
e=*(S.top-1);
return com_de(e);
}
int Empty(SQ &S)
{
if(S.top==S.base) return 1;
return 0;
}
void Clear(SQ &S)
{
S.top=S.base;
}
int main()
{
int n,m,s;
ElemType e;
while(~scanf("%d %d",&n,&m))
{
SQ S;
Init(S);
if(n==0){
printf("0\n");
continue;
}
if(n<0){
printf("-");
n=-n;
}
while(n)
{
s=n%m;
if(s<=9) push(S,'0'+s);
else push(S,'A'+s-10);
n/=m;
}
while(!Empty(S))
{
pop(S,e);
printf("%c",e);
}
printf("\n");
}
}