c - 在 printf 上显示带有空格的单个数字

标签 c binary decimal

我正在编写一个代码来显示结果,即显示各个数字和十进制等值。 例如,如果 n 为 6 并且输入的数字为 110011,则打印输出将为 1 1 0 0 1 1 十进制相当于 51

我已经获取并编辑了代码,但是它显示 “110011 110011 110011 110011 110011 110011”而不是 “1 1 0 0 1 1”。

#include <math.h>

void main()
{
    int  num, binary, decimal = 0, base = 1, remainder, n, digits;

    printf("Please enter the number of digits:\n");
    scanf("%d", &n);

    printf("Please enter the %d digits:\n",n);
    scanf("%d", &num);
    binary = num;
    while (n > 0)
    {
        remainder = num % 10;
        decimal = decimal + remainder * base;
        num = num / 10 ;
        base = base * 2;
        printf("%d   ", binary);
        n--;
    }

    printf("\nIts decimal equivalent is = %d \n", decimal);
}



最佳答案

变量binary中的值成为下一行中变量num中值的副本。

binary = num;

由于此后永远不会更改,因此它将始终保持相同的值,即复制时 num 中的值的副本(请参阅上面的代码行)。
您的循环被执行 n 次(在您的示例中为六次)。
每次循环时,都会在下面的代码行中打印相同的复制值。 因此,在您的示例中,原始值将被打印六次。

printf("%d   ", binary);

您实际上并没有提出问题(StackOverflow 确实推荐这样做)。
所以我回答了这个问题“为什么相同的值被打印六次?”

您现在可能想问下一个问题,“如何获得所需的结果?”
这个问题更难回答,因为您的代码距离实现这一目标还很远。

您必须按照正确的顺序一一确定二进制数字。
您确实可以在代码中的以下行周围一一确定数字。

remainder = num % 10;

但这是错误的顺序,它给出的是从最不重要到最重要的数字。尝试输入“100011”来看看我的意思。

更准确地说,我不得不说,我猜你想要从最多到最少的数字,但也许不是,在这种情况下更容易:打印 remainder 而不是 binary .

如果我是对的,并且您确实想要最多到最少,那么您必须采取某种方法来反转数字。您可以使用堆栈、数组、递归或不同的(更复杂的)数学来首先确定位数。

关于c - 在 printf 上显示带有空格的单个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54501591/

相关文章:

php - PHP 中二进制文件的前缀是什么?

java - Java 中的大数比较

java - 用 Java 计算一个超过 16 位小数的答案

c++ - double 不能正确减去小数

c++ - 如何避免动态分配内存 C++

python -/usr/bin/ld : cannot find -lpython-dev on Ubuntu. 使用PyObject编译C程序

计算两个日期之间的天数

c - 警告 : format '%d' expects type 'int' , 但参数 2 的类型为 'int (*)(int *)'

c# - 为什么我的 Base 10 LSD 基数排序比我的位移位基数排序更快?

xml - 是否有用于二进制 XML 的 Fiddler 插件?