如何反转程序的输出?

时间:2011-10-20 15:51:19

标签: c++ visual-studio binary radix

我必须将43.62之类的十进制数转换为二进制数。所以我首先编写了一个将43转换为二进制的基本程序。但是我注意到我的程序反向打印出二进制数,所以它打印1 1 0 1 0 1而不是1 0 1 0 1 1.如何解决这个问题。

我的代码:

#include <iostream>

using namespace std;

int main()
{
    int number;
    int remainder;

    cout << "Enter a integer: ";
    cin >> number;

    while(number != 0)
    {
        remainder = number % 2;
        cout << remainder << " ";
        number /= 2;
    }

    int pause;
    cin >> pause;

    return 0;
}

9 个答案:

答案 0 :(得分:3)

不是将每个数字发送到cout,而是将它们发送到数组。然后以相反的顺序读出数组。或者将它们推入堆栈,然后将它们从堆栈中弹回。还是......

答案 1 :(得分:2)

大锤要破解坚果,但这是基于递归方法的解决方案:

#include <iostream>
using namespace std;

void OutputDigit(int number)
{
    if (number>0)
    {
        OutputDigit(number /= 2);
        cout << number % 2 << " ";
    }
}

int main()
{
    OutputDigit(43);
    return 0;
}

只需移动cout一行即可获得与之前相同的输出!

答案 2 :(得分:1)

查看vector并考虑如何保存余数而不是立即打印它们。

请注意,您不必将内容放在向量的末尾。 vector::insert允许您指定一个位置......这可能有用吗?

或者,您创建的算法从最低位数开始。有没有办法从最重要的数字开始?如果我有数字42(0101010),则最高有效数字代表32s,而它前面的0代表64s。如果我从42中减去32,会发生什么?

答案 3 :(得分:0)

存储结果然后向后打印会更容易。使用递归也是另一种可能性。

答案 4 :(得分:0)

最重要的是第一位:

const unsigned int BITS_PER_INT = CHAR_BIT * sizeof(int);
char bit_char = '0';
for (int i = BITS_PER_INT - 1;
     i > 0;
     --i)
{
    bit_char = (value & (1 << i)) ? '1' : '0';
    cout << bit_char << ' ';
}
cout << '\n';
cout.flush();

要先打印最低有效位,请更改for循环的方向。

答案 5 :(得分:0)

在C ++中,您还可以使用bitset容器来执行此操作,

#include <bitset>

int i = 43;
std::bitset<sizeof(int)*CHAR_BIT> bin(i);

答案 6 :(得分:0)

只需使用字符串函数

string s ;

while(number != 0)
{
    remainder = number % 2;
    string c = remainder ? "1": "0";
    s.insert(s.begin(),c.begin(),c.end());
    number /= 2;
}

答案 7 :(得分:0)

当您通过保留余数进行此类转换时,结果将始终还原。建议使用bitwise &

unsigned char bit = 0x80; // start from most significant bit
int  number = 43;
while(bit)
{
    if( bit & number ) // check if bit is on or off in your number
    {
       cout << "1";
    }
    else
    {
       cout << "0";
    }
    bit = bit >>1; // move to next bit
}

此示例将开始浏览该数字的所有8位,并检查该位是打开还是关闭并相应打印。

答案 8 :(得分:0)

最佳选择 - 使用C ++ stringstream格式化I / O

// Add the following headers
    #include <sstream>
    #include <algorithm>

    // your function

    stringstream ss;

    // Use ss in your code instead of cout


    string myString = ss.str();
    std::reverse(myString.begin(),myString.end());
    cout << myString;