【问题标题】:How to convert a decimal number into a binary one and insert all his binary digit into a 2d vector?如何将十进制数转换为二进制数并将其所有二进制数插入二维向量?
【发布时间】:2020-04-18 16:46:29
【问题描述】:

如果输入是:

73 68 69 65

输出应如下所示:

0 1 0 0 1 0 0 1 ///73 in binary form
0 1 0 0 0 1 0 0 ///68 in binary form
0 1 0 0 0 1 0 1 ///69 in binary form
0 1 0 0 0 0 0 1 ///65 in binary form

矩阵如上8列,每行包含十进制数的二进制形式。

这是我目前的代码:

    int n, x;
    cin >> n;

    auto A = vector<vector<int>>(n, vector<int>(8)); ///8 columns as mentioned

    while (n--)
    {

        cin >> x;
        for (int j = 8; j >= 0; --j) ///inserting the digits for each number
            if ((x >> j) & 1)
                A[i].emplace_back(1);
            else
                A[i].emplace_back(0);
    }

    for (auto rows : A)
    {
        for (auto elements : rows)
            cout << elements << " ";
        cout << "\n";
    }

我尝试使用按位运算,但使用 vector&lt;vector&lt;int&gt;&gt; 的任何方法都适合我。

如果您能回答,将不胜感激,感谢您的阅读和回答!

还有第二个问题,它显示了 16 位数字 000000000001001001 而不是 01001001,如果输入为 73,则开头有很多零。

【问题讨论】:

  • 关心班次和签名号码
  • 当您使用调试器运行程序时,您看到了什么?这就是调试器的用途。如果您不知道如何使用调试器,这是一个学习如何使用调试器一次运行一行的好机会,监控所有变量及其值的变化,并分析程序的逻辑执行流程。了解如何使用调试器是每个 C++ 开发人员必备的技能,没有例外。在调试器的帮助下,您应该能够快速找到此程序以及您编写的所有未来程序中的所有错误,而无需向任何人寻求帮助。
  • “这是我目前的代码:” 你有问题吗?
  • i != j,重新检查它们的使用情况。
  • 已经建议您使用调试器。该错误非常简单,应该可以在调试器中轻松观察到。您应该花一些时间学习如何使用调试器,并学习如何在您自己的代码中查找和修复错误,而无需向任何人寻求帮助。这样做不是很有意义吗,而不是在每次程序无法正常运行时向 stackoverflow.com 发布问题并等待数小时或数天?

标签: c++ matrix vector stl binary


【解决方案1】:

您的解决方案背后的主要问题是 Int 类型不是存储在一个字节上,我制定了适合您代码的解决方案。

注意:我将输入存储在一个无符号字符中,该字符存储在一个字节中(而不是使用 int),这样做从 cin 读取的输入是一个字符,例如:'8',所以考虑 ASCII表我可以得到字符减去48所代表的数字(解释见ASCII表):

int main()
{
    int n;
    unsigned char x;
    cin >> n;

    auto A = vector<vector<int> >(n); ///8 columns as mentioned

    while (n--)
    {
        cin >> x;
        x -= 48;
        auto aByte = vector<int>(8);

        for (int j = 0; j < 8 ; ++j) ///inserting the digits for each number
        {
            if ( (x >> j) & 0x01 )
                aByte[7 - j] = 1;
            else
                aByte[7 - j] = 0;
        }
         A[n] = aByte;
    }

    for (auto rows : A)
    {
        for (auto elements : rows)
            cout << elements << " ";
        cout << "\n";
    }
}

上述解决方案仅适用于一位数字,对于更多数字(但仅限于一个字节表示),您可以将 cin 转换为 int,然后将 int 转换为 unsigned char,只需替换以下代码行:

cin >> x;
x -= 48;

这些:

int i;
cin >> i;
x = static_cast<unsigned char>(i);

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 2011-01-08
    • 2010-12-08
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多