题目描述:编写程序,用递归方法将十进制的正整数 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就行