Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以相反方向(C++)进行写入输出?_C++ - Fatal编程技术网

如何以相反方向(C++)进行写入输出?

如何以相反方向(C++)进行写入输出?,c++,C++,我创建了一个简单的十进制到二进制的程序。 假设我输入数字8。 它回写0001 我希望它是1000 我该怎么做 代码如下: using namespace std; int translating(int x); int main() { int x; int translate; cout << "Write a number: "; cin >> x; cout << endl; translate = t

我创建了一个简单的十进制到二进制的程序。 假设我输入数字8。 它回写0001 我希望它是1000

我该怎么做

代码如下:

using namespace std;

int translating(int x);

int main()
{
    int x;
    int translate;
    cout << "Write a number: ";
    cin >> x;
    cout << endl;
    translate = translating(x);
    cout << endl;
    cout << endl;

    return 0;
}

int translating(int x)
{
    if (x == 1)
    {
        cout << "1";
        return 0;
    }
    if ((x % 2)==1)
    {
        cout << "1";
        return (translating((x-1)/2));
    }
    else
    {
        cout << "0";
        return (translating(x/2));
    }
}

与其直接写入输出,不如先将其写入一个临时字符串,然后从最后一个字符遍历该字符串到第一个字符。

非常简单,如此简单,您会自暴自弃。只需颠倒输出语句和递归函数调用的顺序即可。还修复了一个bug

void translating(int x)
{
    if (x < 2)
    {
        cout << x;
        return;
    }
    if ((x % 2)==1)
    {
        translating((x-1)/2);
        cout << "1";
    }
    else
    {
        translating(x/2);
        cout << "0";
    }
}

将输出存储在字符串中,然后使用std::reverse将其反转。这是一个糟糕的解决方案。不必要的复制。什么?正在复制多少字节?优化没有执行数百万次的代码是毫无意义的。他的代码只执行一次,就像复制了10个字节。这不是优化的问题,而是代码清晰的问题。你的答案是采用一个写错的算法,然后通过复制和反转来修复它。首先最好正确地编写算法。好吧,说实话,我甚至没有看一眼代码。我通常拒绝看代码墙,在那里OP只是粘贴了他的整个程序。这是懒惰的表现。因为我还不知道弦是如何工作的,所以我不知道。虽然这似乎是解决我问题的最简单的方法。如果我调用translating0,堆栈会发生什么情况?@msandiford OP的代码有bug,但我的代码也有相同的bug。我希望现在已经修复了这个错误。哦,继续。还可以修复它的其余部分。@msandiford我认为我不应该偏离OP的代码太多。这个想法是正确的,OP可以自己修复任何进一步的bug。是的,我可以看到,当我键入0时,它溢出,将修复添加另一个if,这是我现在最容易理解的