返回十进制 - >二进制转换的二进制字符串,而不是打印值

时间:2016-02-09 21:20:34

标签: c++ recursion binary

我创建了一个程序,递归地将小数转换为二进制,并将值打印到屏幕上。

但是,我希望这个程序返回一个void decToBin(int n) { int remainder; remainder = n%2; if(n > 0) { decToBin(n/2); cout << remainder; } } ,其中包含构成二进制数的1和0。我尝试了很多方法,但是我不确定如何实现这种改变。

{{1}}

2 个答案:

答案 0 :(得分:1)

  1. decToBin的返回值更改为std::string
  2. remainder的字符串表示连接到函数的递归调用的返回值并返回它。
  3. std::string decToBin(int n) {
        if(n > 0) {
            std::ostringstream s;
            s << n%2;
            return decToBin(n/2) + s.str();
        }
    
        // The terminating condition.
        return "";
    }
    

    使用以下功能可以将功能简化为一个衬里:

    std::string decToBin(int n)
    {
       return (n > 0) ? decToBin(n/2) + std::string(1, (n%2+'0')) : "";
    }
    

答案 1 :(得分:1)

使用内存中的流而不是std::cout,并在结尾处返回缓冲区:

#include <sstream>

std::string decToBin(int n) {
    std::ostringstream stream;
    int remainder = n % 2;
    if (n > 0) {
        stream << decToBin(n / 2);
        stream << remainder;
    }
    return stream.str();
}

那就是说, 非常低效,因为有很多字符串分配。您可能需要迭代算法而不是递归算法,因此您只需要一个字符串流。