c - 如何使 printf 从右到左

标签 c

我已经编写了这段用于将十进制数转换为二进制数的代码,但它打印的数字反之亦然,我该如何进行这项工作? 我可以使用 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/

相关文章:

c - 像 C 中的 printf 这样的函数参数

c - MapViewOfFile-OpenFileMapping(需要帮助)

C - 如何在 while 循环中处理用户输入

c - 为什么我的二叉树不打印任何内容?

c - 有没有办法在不使用共享内存的情况下更改另一个进程的数据?

c - 使用相同的指针询问下一个值

c - C语言中变量名后面的括号有效还是无效?

C 标准版本检查

c - 如何知道链表是​​否被正确删除?

c - 使用指针反转字符串