我创建了一个程序,递归地将小数转换为二进制,并将值打印到屏幕上。
但是,我希望这个程序返回一个void decToBin(int n) {
int remainder;
remainder = n%2;
if(n > 0) {
decToBin(n/2);
cout << remainder;
}
}
,其中包含构成二进制数的1和0。我尝试了很多方法,但是我不确定如何实现这种改变。
{{1}}
答案 0 :(得分:1)
decToBin
的返回值更改为std::string
。remainder
的字符串表示连接到函数的递归调用的返回值并返回它。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();
}
那就是说, 非常低效,因为有很多字符串分配。您可能需要迭代算法而不是递归算法,因此您只需要一个字符串流。