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<stdio.h>
#define N 100
int main()
{
int n, r;
while(scanf("%d%d", &n, &r)!=EOF){
int num[N], i = 0;
if(n<0){
printf("-");
n *= (-1);
} // 负号的处理
while(n){
num[i] = n%r;
n /= r;
i++;
} // 如何将是十进制数转化:http://blog.csdn.net/yang_chengfeng/article/details/50859882
while(i--){
switch(num[i]){ // 这是刚开始想到的笨方法
case 0:
printf("0");
break;
case 1:
printf("1");
break;
case 2:
printf("2");
break;
case 3:
printf("3");
break;
case 4:
printf("4");
break;
case 5:
printf("5");
break;
case 6:
printf("6");
break;
case 7:
printf("7");
break;
case 8:
printf("8");
break;
case 9:
printf("9");
break;
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
}
}
printf("\n");
}
return 0;
}
下面是看到的别人的做法,因此学习起来
#include<stdio.h>
#define N 100
int main()
{
int n, r;
char str[17] = "0123456789ABCDEF"; // 不错的解决方式
while(scanf("%d%d", &n, &r)!=EOF){
int num[N], i = 0;
if(n<0){
printf("-");
n *= (-1);
}
while(n){
num[i] = n%r;
n /= r;
i++;
}
while(i--){
printf("%c", str[num[i]]); // 以十六进制形式对前17个数进行绑定
}
printf("\n");
}
return 0;
}