我已经编写了这段代码,用于将十进制数转换为二进制数,但它打印了数字,反之亦然,我怎样才能完成这项工作?我可以使用getch命令来实现我们目前正在学习getch。
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
for(;n>0;n=n/2){
int d = n%2;
printf("%d", d);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以通过使用递归函数来解决这个问题:
#include <stdio.h>
void print_binary(int n)
{
if (n != 0) {
print_binary(n/2);
printf("%d ", n%2);
}
}
int main() {
int n;
scanf("%d", &n);
print_binary(n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通过在递归调用返回后打印,数字以相反的顺序打印。
每次print_binary调用时,它都会使用参数 来调用自身n/2,然后打印最低有效位。然而,每个递归调用都会做同样的事情。
调用堆栈如下所示,n等于 11(二进制 1011):
main
scanf
print_binary(11)
print_binary(5)
print_binary(2)
print_binary(1)
print_binary(0)
printf("%d ", 1);
printf("%d ", 0);
printf("%d ", 1);
printf("%d ", 1);
Run Code Online (Sandbox Code Playgroud)
您可以看到这会导致首先打印最高有效位。