进制转换
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R != 10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
7 2
23 12
-4 3
Sample Output
111
1B
-11
#include <iostream>
#include <bits/stdc++.h>
#define max 10000
using namespace std;
typedef char elemtype;
typedef struct
{
elemtype*top,*base;
int stacksize;
}sqstack;
void creat(sqstack*s)
{
s->base=(elemtype*)malloc(max*sizeof(elemtype));//申请max大小。
s->top=s->base;
s->stacksize=max;
}
void push(sqstack*s,char e)
{
*s->top=e; //指针前面加*为取该地址中的值
s->top++;
}
void zhuanhua(sqstack*s,int n,int m)
{
int t;
int q=n;
if(n==0)
push(s,'0');
if(m>= 2&& m<=16 && m!=10)
while(fabs(n))
{
int p=fabs(n);
t=p%m;
if(t>=0&&t<=9)
push(s,t+'0');
else
if(t>=10&&t<=15)
push(s,t-10+'A');
n=fabs(n)/m;
}
if(q<0)
push(s,'-');
}
void put(sqstack*s)
{
while(s->base != s->top)
{
s->top--;
printf("%c",*s->top);
}
printf("\n");
}
int main()
{
int n,r;
while(scanf("%d%d",&n,&r)!=EOF)
{
sqstack s;
creat(&s);
zhuanhua(&s,n,r);
put(&s);
}
return 0;
}