尝试使用 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 的输出。您会注意到其中一些甚至不匹配反向模式。确保所有if
s 的所有路径都打印出一些东西。
【参考方案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 >= 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 中的递归将十进制转换为二进制转换器的主要内容,如果未能解决你的问题,请参考以下文章