尝试使用 c 中的递归将十进制转换为二进制转换器

Posted

技术标签:

【中文标题】尝试使用 c 中的递归将十进制转换为二进制转换器【英文标题】:trying to make decimal to binary converter using recursion in 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 的所有路径都打印出一些东西。 【参考方案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');

【讨论】:

以上是关于尝试使用 c 中的递归将十进制转换为二进制转换器的主要内容,如果未能解决你的问题,请参考以下文章

c语言 数制转换(递归)

Haskell:递归地将十六进制字符串转换为整数?

如何将一串二进制数转换为 C 中的字符(每个字符都必须有一个半字节)?

求解 使用php将1000位的十进制大数转成二进制

使用 OpenCV 将 RGB 图像转换为二进制图像

C编程十进制到二进制 - 将前导零添加到递归方法