【问题标题】:How to make the printing output starts from right to left?如何使打印输出从右到左开始?
【发布时间】:2019-09-05 18:09:21
【问题描述】:

我是编程新手,我做了一个十进制到二进制的转换器。我需要帮助以使打印输出从右到左开始(反转)。(对不起,如果我的代码很乱)

int main()
{
    int num, form;

    printf("Decimal to Binary\n\n");
    printf("        Value          : ");
    scanf("%d", &num);
    printf("        Expected Format (Type 2 for binary): ");
    scanf("%d", &form);
    if (form == 2)
        printf("        %d base 10 is ", num);
    if (form == 2)
        do {
            if (num % 2 == 0) {
                printf("0");
                num = num / 2;
            }
            else {
                printf("1");
                num = num / 2;
            }
        } while (num > 0);
    else
        printf("Invalid input!");

    return 0;
}

如果我输入的值是25,我预计输出是“11001”,但实际输出是“10011”

【问题讨论】:

标签: c


【解决方案1】:

一些递归..在我看来,它看起来好多了

#include <stdio.h>

void rec(int num)
{
    if (num==0) return;
    rec(num>>1);
    printf("%d", num%2);
}

int main()
{
  int n;

  printf("Enter an integer in decimal number system\n");
  scanf("%d", &n);
  printf("%d in binary number system is: ", n);

  rec(n);

  printf("\n");
  return 0;
}

【讨论】:

  • 如何更好?递归会导致很多问题,在这里我真的看不到好处。正如@Tscheppe 建议的那样,您所要做的就是将整数或字符位按位移动并在每次迭代时打印最低有效位的值
  • 我刚刚写了这段代码来展示在这种情况下如何递归。实际上它确实比使用循环实现要慢,但有点紧凑
  • 这里递归的好处是结果可能已经按正确的顺序打印出来了,代码小且易于维护。此外,在这种特殊情况下,我也看不到递归在哪里会导致问题。实现目标的方法总是有很多,你应该选择你最熟悉的一种。
【解决方案2】:

正如 Jean-Francois Fabre 所说,一种可能性是递归。既然你提到你是一个初学者,递归有时一开始很难理解,所以我在他的链接中没有找到的另一种可能性是这样的

#include <stdio.h>

int main()
{
  int n, c, k;

  printf("Enter an integer in decimal number system\n");
  scanf("%d", &n);

  printf("%d in binary number system is:\n", n);

  for (c = 8; c >= 0; c--)
  {
    k = n >> c;

    if (k & 1)
      printf("1");
    else
      printf("0");
  }

  printf("\n");

  return 0;
}

您可以使用c指定输出的长度,或者提前计算得到完美的输出。

【讨论】:

  • 有没有办法在我的代码中添加这个“递归”而不改变大部分内容?提前致谢
猜你喜欢
  • 2017-02-21
  • 2017-07-22
  • 1970-01-01
  • 2014-09-11
  • 2012-05-27
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2017-02-05
相关资源
最近更新 更多