我在做学校的新生练习题时,对一道题目有疑问,我开始是直接写了一道判断的,但没有通过,后来用了个递归才过了,但不知道一开始那一段代码的错误出现在哪里。
下面是题目:
题目描述
输入一个十进制数N,将它转换成R进制数输出。
输入格式
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R不等于10)。
输出格式
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
样例输入
7 2
23 12
-4 3
样例输出
111
1B
-11
这段是我无法通过的代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int n, r; char arr[100] = { 0 };
while (~scanf("%d%d", &n, &r) && r >= 2 && r <= 16) {
if (n < 0) {
printf("-");
n = -n;
}
int i = 0; int len = 0;
int u = n % r;
while (n > 0) {
arr[i] = n % r;
n = n / r;
i++;
len++;
}
for (int i = len - 1; i > 0; i--) {
printf("%d", arr[i]);
}
if (r >= 10 && r <= 16) {
printf("%c", u + 55);
}
else {
printf("%d", arr[len - 1]);
}
printf("\n");
}return 0;
}
以下这段是我通过的递归代码:
#include <stdio.h>
#include <string.h>
void convert(int n, int r) {
static char digits[] = "0123456789ABCDEF";
if (n >= r) {
convert(n / r, r);
}
putchar(digits[n % r]);
}
int main() {
int n, r;
while (scanf("%d%d", &n, &r) == 2 && r >= 2 && r <= 16) {
if (n < 0) {
putchar('-');
n = -n;
}
convert(n, r);
putchar('\n');
}
return 0;
}
非常感谢