【发布时间】:2021-06-05 18:55:25
【问题描述】:
所以我一直在尝试这样做,但我就是想不出一个解决方案。我有这段代码,但它向后输出(如果答案是 11110,我得到 01111):
#include <stdio.h>
int base(int n)
{
if(n==0)
return 0;
else
{
printf("%d",n%2);
}
return base(n/2);
}
int main() {
int n;
scanf("%d",&n);
base(n);
return 0;
}
这个问题有什么诀窍吗,还是我需要深入分析一下?
【问题讨论】:
-
不是按照处理顺序(从右到左)打印数字,而是传递一个缓冲区,您可以在其中以正确的顺序填写这些数字。然后在最后打印。
-
在递归调用之后打印,而不是之前。
-
我会使用掩码以避免有缓冲区,请参阅我的回答
-
Rares Amza,
n < 0时应该打印什么?当n== 0? -
感谢有用的提示,通话后打印的提示也将非常有用@chux-ReinstateMonica 我不太关心
n<0和n==0时的情况应该只打印0我猜因为这就是你在base 2中表示它的方式