c - Dec 到 bin 转换器函数向后打印结果

标签 c recursion converters

作为练习的一部分,我必须重写一个递归函数,以使新函数不递归。这两个函数都需要将正十进制整数输入转换为它们的等效二进制数。

这是使用递归的代码:

void convert(int n) { //recursive
  if (n > 0) {
    convert(n/2);
    printf("%d", n%2);
  }

  return;
}

这是我的代码:

void convert(int n) { //non-recursive
  while (n > 0) {
    printf("%d", n%2);
    n/=2;
  }

  return;
}

我的代码的问题是,可以理解的是,我的二进制转换被倒着打印出来。例如,如果我输入数字 8,我的函数返回 0001,如果我输入 2,则返回 01,等等。

对于仅使用 stdio.h 库的快速修复有什么建议吗?

最佳答案

这是一个非递归版本,它产生与递归版本相同的结果并且不需要数组:

void convert(int n) {
    int     s;

    for (s = 1; n/s/2 > 0; s *= 2)
        ;

    for (; s >= 1; s /= 2) {
        printf("%d", (n/s) % 2);
    }
}

此版本处理零数和大数(但不处理负数)。

关于c - Dec 到 bin 转换器函数向后打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35660471/

相关文章:

c - 从对象的高级定义生成 C 结构

c - 如何使单个 "makefile"创建 3 个输出二进制文件

c - 如何在创建多维数组后立即为其分配多个值 - 在 C 中?

recursion - 为什么永远的循环不会崩溃?为什么无限递归会崩溃?

c - 十六进制字符串转二进制字符串

java - 使用AnnotationStrategy时自动反序列化子节点

c - 坚持使用 c 中的语法 - 指针

java - java中的递归和跨堆栈维护变量状态

c# - 如何将位图照片转换为十六进制颜色代码?

javascript - 剪刀的递归解