我正在编写一个代码来显示结果,即显示各个数字和十进制等值。 例如,如果 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/