我已经编写了这段用于将十进制数转换为二进制数的代码,但它打印的数字反之亦然,我该如何进行这项工作? 我可以使用 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;
}
最佳答案
你可以通过使用递归函数来解决这个问题:
#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;
}
通过在递归调用返回后打印,数字以相反的顺序打印。
每次调用 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);
您可以看到,这导致首先打印最高有效位。
关于c - 如何使 printf 从右到左,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40430524/