如何反转程序的输出



我必须把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;
}

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

这是一个基于递归方法的解决方案:

#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向上移动一行来获得与之前相同的输出!

看看vector,想想保存剩余的而不是马上打印它们是如何有用的。

注意,你不必把东西放在向量的末尾。vector::insert让你指定一个位置…这有帮助吗?

或者,您创建的算法从最低有效数字开始。有没有一种方法可以从最高位开始呢?如果我有数字42 (0101010),最高有效数字代表32,它前面的0代表64。42减去32会怎样?

存储结果然后向后打印会更容易。使用递归也是实现这一目标的另一种可能。

最高有效位优先:

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循环的方向。

在c++中,您也可以使用bitset容器来完成此操作,

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

使用字符串函数

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

当您通过保留余数来进行这种转换时,结果将始终被还原。建议使用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位数字,检查位是打开还是关闭,并相应地打印。

最佳选择-使用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;

相关内容

  • 没有找到相关文章

最新更新