【问题标题】:trying to make decimal to binary converter using recursion in c尝试使用 c 中的递归将十进制转换为二进制转换器
【发布时间】:2020-06-19 07:32:42
【问题描述】:

我需要在 c 中使用递归进行十进制到二进制转换器 但输出错误 ex 十进制 = 22,正确的二进制 = 10110,输出 = 01101

所以这是我想出的代码

#include <stdio.h>

int biner (int a){


    if (a == 1)
    return 1;

    else if (a % 2 == 1)
    {
    printf ("1");
    return biner (a / 2);
    }


    else
    {
    printf ("0");
    return biner (a / 2);
    }



}


int main () {
    int a;
    printf ("Masukan angka ");
    scanf ("%d", &a);


    printf ("%d", biner (a));



}

我需要改变哪一部分 提前致谢

【问题讨论】:

  • 您的程序计算并反向显示结果。
  • 我已经把输入、输出和预期放在代码前面了。
  • 请解释您的代码的想法。您想在递归时打印吗?你想返回然后打印的东西吗?你似乎正在尝试两者兼而有之。第一步是决定并清理它。然后可以提出解决方案。我建议将您的代码更改为不返回任何内容,并且仅在递归时打印。 IE。做一个空函数。不要返回。不要尝试打印 biner() 的返回值。
  • 请尝试显示所有值 0 到 31 的输出。您会注意到其中一些甚至不匹配反向模式。确保所有ifs 的所有路径都打印出一些东西。

标签: c recursion binary converters


【解决方案1】:

OP 的代码输出顺序错误,因为它需要在打印之前递归以首先打印最高有效数字。

代替

printf ("1");   // prints least significant digit
biner (a / 2);  // prints most significant digits

更像

biner (a / 2);  // prints most significant digits
printf ("1");   // prints least significant digit

真的不需要返回值,让biner()可以做所有的打印。

由于代码没有尝试打印符号,不妨使用unsigned a

如果a == 0,OP 的代码会无限递归。仅在 a &gt;= 1 时递归。 (左边有一个二进制数字。)

d为0或1,要打印的二进制数可以使用putchar('0' + d)

建议的简化:

#include <stdio.h>

void biner(unsigned a) {
  if (a > 1) {   // Do binary digits exist to the left?
    biner(a/2);  // Print them.
  }
  putchar('0' + a%2);  // Now print the least significant digit.
}

int main(void) {
  unsigned a;
  printf("Masukan angka ");
  scanf("%u", &a);

  biner(a);
  putchar('\n');
}

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 2021-07-09
    • 2013-09-23
    相关资源
    最近更新 更多