进制转换
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
解题思路:
1.用除余的方法求各个进制的各个数,用数组保存
2.负数的加负号
3.ABCDE用if语句判断输出
4.倒序输出
代码:
#include<iostream>
#include<string>
#include<stdio.h>
#include<cmath>
using namespace std;
int main()
{
int N, R;
while (~scanf("%d %d", &N, &R))
{
int num, i = 0, c[100000];
for (int num = abs(N); num != 0; ++i)
{
c[i] = num % R;
num /= R;
}
if (N < 0)
printf("-");
for (int j = i - 1; j >= 0; --j)
{
if (c[j] == 10)
printf("A");
else if (c[j] == 11)
printf("B");
else if (c[j] == 12)
printf("C");
else if (c[j] == 13)
printf("D");
else if (c[j] == 14)
printf("E");
else if (c[j] == 15)
printf("F");
else
printf("%d", c[j]);
}
printf("\n");
}
return 0;
}