进制转换
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
Author
lcy
Source
C语言程序设计练习(五)
程序思路
标准的除数取余,注意int与char间的转换即可
AC
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
char convert(signed int n) {
if (n < 10)
return n + '0';
return 'A' + n - 10;
}
int main()
{
signed int N, R,pointer;
char ans[1005];
while (scanf("%d %d", &N, &R) != EOF) {
if (N == 0)
printf("0\n");
if (N < 0) {
N = -N;
printf("-");
}
memset(ans, 0, sizeof(ans));
pointer = 0;
while (N != 0) {
ans[pointer] = convert(N % R);
N /= R;
pointer++;
}
for (int i = strlen(ans) - 1; i >= 0; i--)
printf("%c", ans[i]);
printf("\n");
}
return 0;
}