生成二进制数的程序
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
反转它,或者以相反的顺序打印它。
你好,我需要一些帮助,我不知道该怎么做,抱歉我的英语不好
我需要用 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
反转它,或者以相反的顺序打印它。