作为练习的一部分,我必须重写一个递归函数,以使新函数不递归。这两个函数都需要将正十进制整数输入转换为它们的等效二进制数。
这是使用递归的代码:
void convert(int n) { //recursive
if (n > 0) {
convert(n/2);
printf("%d", n%2);
}
return;
}
这是我的代码:
void convert(int n) { //non-recursive
while (n > 0) {
printf("%d", n%2);
n/=2;
}
return;
}
我的代码的问题是,可以理解的是,我的二进制转换被倒着打印出来。例如,如果我输入数字 8,我的函数返回 0001,如果我输入 2,则返回 01,等等。
对于仅使用 stdio.h
库的快速修复有什么建议吗?
最佳答案
这是一个非递归版本,它产生与递归版本相同的结果并且不需要数组:
void convert(int n) {
int s;
for (s = 1; n/s/2 > 0; s *= 2)
;
for (; s >= 1; s /= 2) {
printf("%d", (n/s) % 2);
}
}
此版本处理零数和大数(但不处理负数)。
关于c - Dec 到 bin 转换器函数向后打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35660471/