如何让printf从右到左

ATh*_*der 2 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;
}
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 5

您可以通过使用递归函数来解决这个问题:

#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)

您可以看到这会导致首先打印最高有效位。