希望各位看看哪出了大问题

题目描述:编写程序,用递归方法将十进制的正整数 N 转换为 b 进制数(2≤b≤36):输入:一行输入两个非负整数,分别是十进制的 N 和 b ,其中 0 <=N <=2^31 ,2 <=b <= 36 。输出:N 的 b 进制数。

样例1:输入:579 8输出:1103 样例2:输入:579 20输出:18J
#include <stdio.h>
int k(int* a, int n, int b,int l) {

if (n!=0) {
    a[l] = n % b;
    n = n / b;
    l++;
    return k(a, n, b, l);
}
return l;

}
int main(){
int a[100];
int c[100];
int n, b, i;
int x;
scanf("%d%d", &n, &b);
x=k(a, n, b,0);
for (i = 0; i <= x; i++) {

        c[i] = a[x - i];
    
}
for (i = 0; i <= x; i++) {
    if (b > 10 && c[i] >= 10) {
        printf("%c", c[i] + 55);
}
    if(c[i]<10&&c[i]>=0)
    printf("%c", c[i]+48);
    
}return 0;

}

在main函数里,for循环多判断了一个数,在k函数里加入打印语句就知道为啥了,代码如下:


#include <stdio.h>
int k(int* a, int n, int b,int l) {
if (n!=0) {
    a[l] = n % b;
    printf("n=%d,b=%d,a[%d]=%d\n",n,b,l,a[l]);        
    n = n / b;
    l++;
    printf("after change n=%d,l=%d\n",n,l);
    return k(a, n, b, l);
}
return l;
}
int main(){
int a[100];
int c[100];
int n, b, i;
int x;
scanf("%d%d", &n, &b);
x=k(a, n, b,0);
for (i = 0; i < x; i++) {

        c[i] = a[x - i-1];
    
}
for (i = 0; i < x; i++) {
    if (b > 10 && c[i] >= 10) {
        printf("%c", c[i] + 55);
}
    if(c[i]<10&&c[i]>=0)
    printf("%c", c[i]+48);
    
}return 0;
}


不知道是你代码粘贴错行了,那个值取不到x的 小于x就行