输入一个十进制数N,将它转换成R进制数输出。
Input输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。 Output为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。Sample Input
7 2 23 12 -4 3Sample Output
111 1B -11
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int i,j;
int c;
for(i=(s[0]=='-'?1:0),j=strlen(s)-1; i<j;i++,j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void convert(int n, int r, char *s)
{
char *t;
t = s;
// 处理负数
if(n<0) {
*t++ = '-';
n = -n;
}
while(n) {
*t = n % r;
if(*t >= 10)
*t = *t - 10 + 'A';
else
*t = *t + '0';
n /= r;
t++;
}
*t = '\0';
reverse(s);
}
int main(void)
{
int n, r;
char t[80];
while(scanf("%d%d", &n, &r) != EOF) {
convert(n, r, t);
printf("%s\n", t);
}
return 0;
}