生成二进制数的程序

Program to make binary numbers

你好,我需要一些帮助,我不知道该怎么做,抱歉我的英语不好

我需要用 C++ 编写一个程序,它告诉我可恶的数字,据我的老师说,可恶的数字是一些转换为二进制的数字有奇数,例如 2 (10) 4(100) 7 (111) 8 (1000) 11(1011)

所以我需要开发一个程序来执行此操作

输入一个数字,然后告诉我输入该数字之前所有讨厌的数字 希望你能理解这个

谢谢

好的,所以我在博客上找到了这段代码

// C++ program to generate binary numbers from 1 to n
#include <iostream>
#include <queue>
using namespace std;

// This function uses queue data structure to print binary numbers
void generatePrintBinary(int n)
{
// Create an empty queue of strings
queue<string> q;

// Enqueue the first binary number
q.push("1");

// This loops is like BFS of a tree with 1 as root
// 0 as left child and 1 as right child and so on
while (n--)
{
    // print the front of queue
    string s1 = q.front();
    q.pop();
    cout << s1 << "\n";

    string s2 = s1;  // Store s1 before changing it

    // Append "0" to s1 and enqueue it
    q.push(s1.append("0"));

    // Append "1" to s2 and enqueue it. Note that s2 contains
    // the previous front
    q.push(s2.append("1"));
}
}
// Driver program to test above function
    int main()
    {
    int n;
    printf("Por favor ingrese un numero\n");
    scanf(" %d" ,&n);
    generatePrintBinary(n);
    return 0;
    }

我只是指定一个数字,我修改为让用户输入任何数字,现在我只需要打印奇数二进制数,我该怎么做?

好吧,您需要一个函数将您的十进制数除以 2 直到 0 并递增每个除法的余数。如果结果是奇数,你就有了你讨厌的数字。

类似于:

int res = 0;
while (number > 0)
{
    res += number % 2; // add the remainder of the division by 2 to res
    number = number / 2; 
}
if (res % 2 == 1) // if res is odd, its modulo by 2 is 1
    // hateful number

此外,如果您熟悉按位运算,我知道有人可以做到这一点:

int res;
for (res = 0; number > 0; res++)
{
    number &= number - 1;
}
if (res % 2 == 1)
    // hateful number

编辑:

您可以先检查我显示的 1 的数量,然后决定打印它,如果它是您所说的 'hateful' 数量。要打印它,以下代码片段可能会有所帮助:

std::vector<int> vec;
while(number > 0)
{
    vec.push_back(number % 2);
    number = number / 2;
}

请注意,向量将被反转,例如 6 将是 011 而不是 110。您可以使用 algorithm header 的 std::reverse 反转它,或者以相反的顺序打印它。